亚洲AV日韩AV无码污污网站_亚洲欧美国产精品久久久久久久_欧美日韩一区二区视频不卡_丰满无码人妻束缚无码区_久爱WWW成人网免费视频

切換到寬版
  • 廣告投放
  • 稿件投遞
  • 繁體中文
  • 在AutoCAD中動態(tài)讀取Excel數(shù)據(jù)的方法

    作者:佚名 來源:光行天下論壇整理 時間:2011-03-13 11:17 閱讀:1868 [投稿]
    隨著Automation編程技術(shù)的出現(xiàn),我們可以很方便地實現(xiàn)這一點了,下面是個ObjectARX的例子,其功能是動態(tài)關(guān)聯(lián)Excel,然后讀取其數(shù)據(jù),并將這些數(shù)據(jù)打印在文本域中。
    在實際的工作中,我們經(jīng)常要對一些表格數(shù)據(jù)進(jìn)行處理,如果先把這些表格數(shù)據(jù)通過Excel處理,再導(dǎo)入到AutoCAD,那絕對會起到事半功倍的效果。隨著Automation編程技術(shù)的出現(xiàn),我們可以很方便地實現(xiàn)這一點了,下面是個ObjectARX的例子,其功能是動態(tài)關(guān)聯(lián)Excel,然后讀取其數(shù)據(jù),并將這些數(shù)據(jù)打印在文本域中。

    //動態(tài)從Excel讀取數(shù)據(jù)
    int DynamicReadFromExcel() 
    {
     //常用變量定義
     _Application app;    
     Workbooks books;
     _Workbook book;
     Worksheets sheets;
     _Worksheet sheet;
     Range range;
     Range iCell;

     LPDISPATCH lpDisp;     
     COleVariant
            covTrue((short)TRUE),
            covFalse((short)FALSE),
            covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      
     COleVariant vResult;

     //采用MFC方式初始化COM庫,程序結(jié)束時COM庫會自動釋放
     if(!AfxOleInit())
     { 
      MessageBox(NULL,"初始化COM支持庫失敗!\n無法控制Excel!", \
       "TrueTable",MB_IConERROR | MB_OK);  
      return RTERROR;
     } 
      
     //關(guān)聯(lián)已經(jīng)運行的Excel實例
     CLSID clsid;
     CLSIDFromProgID(L"Excel.Application", &clsid);  
     IUnknown *pUnk = NULL;
     IDispatch *pRunDisp = NULL;
     
     for(long i=1;i<=5;i++) //做5次嘗試
     {
      HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&amp;pUnk);
      if(SUCCEEDED(hr)) 
      {
       hr = pUnk->QueryInterface(IID_IDispatch, (void **)&amp;pRunDisp);
       break;
      }
      ::Sleep(10);
     }
     
     if (!pRunDisp) 
     {
      ::MessageBox(NULL, &#34;沒有發(fā)現(xiàn)Excel!&#34;, &#34;TrueTable&#34;, MB_ICONHAND);
      return RTERROR;
     }

     if (pUnk)  pUnk->Release();
     
     //關(guān)聯(lián)Excel
     app.AttachDispatch (pRunDisp);

     //得到當(dāng)前活躍sheet
     //如果有單元格正處于編輯狀態(tài)中,此操作不能返回,會一直等待
     lpDisp=app.GetActiveSheet();
     if(lpDisp==NULL)
     {
      MessageBox(NULL, &#34;沒有發(fā)現(xiàn)有效的表格!&#34;, \
       &#34;TrueTable&#34;,MB_IConERROR | MB_OK); 
      app.ReleaseDispatch (); 

      return RTERROR;
     }
     sheet.AttachDispatch(lpDisp);
     
     //已經(jīng)使用的行數(shù):
     long row_num;
     range.AttachDispatch(sheet.GetUsedRange());
     range.AttachDispatch(range.GetRows());
     row_num=range.GetCount();
     
     //已經(jīng)使用的列數(shù):
     long col_num;
     range.AttachDispatch(sheet.GetUsedRange());
     range.AttachDispatch(range.GetColumns());
     col_num=range.GetCount();

     //已經(jīng)使用區(qū)域的起始行、列:
     range.AttachDispatch(sheet.GetUsedRange());
     long StartRow=range.GetRow();       //起始行
     long StartCol=range.GetColumn();    //起始列

     //讀取sheet名
     CString SheetName=sheet.GetName();
     //ads_printf(&#34;\n%s&#34;,SheetName); 
     if(col_num<2 &amp;&amp; row_num<2)     //此sheet為空
     {
      MessageBox(NULL,&#34;\n當(dāng)前表格沒有數(shù)據(jù)!&#34;, \
       &#34;TrueTable&#34;,MB_IConERROR | MB_OK); 
      app.ReleaseDispatch (); 

      return RTERROR;
      
     }
     else
     {
      ads_printf(&#34;\n表格%s共%d行,%d列&#34;,SheetName,row_num,col_num);
     }
      
     //得到全部Cells,此時,range是cells的集合 
     range.AttachDispatch(sheet.GetCells()); 
      
     //讀寫數(shù)據(jù)了
     CString cstr;
     ads_printf(&#34;\n&#34;);
     for(long i=StartRow;i<StartRow+row_num;i++)
     {
        
      for(long j=StartCol;j<StartCol+col_num;j++)
      {
       
       //讀取單元格文本
       iCell.AttachDispatch(range.GetItem (COleVariant(i),COleVariant(j)).pdispVal );
       vResult =iCell.GetText();
       cstr=vResult.bstrVal;
       
       //寫單元格文本
       ads_printf(&#34;%s    &#34;,(LPTSTR)cstr);
          
      }
      ads_printf(&#34;\n&#34;);
     }

     //釋放Dispatch 
     iCell.ReleaseDispatch ();
     range.ReleaseDispatch ();
     sheet.ReleaseDispatch ();
     sheets.ReleaseDispatch ();
     book.ReleaseDispatch ();
     books.ReleaseDispatch ();
     app.ReleaseDispatch (); 
     
     return RTNORM;

    }

     如果要輸出到Excel的話,關(guān)鍵函數(shù)就是:
     iCell.SetItem(COleVariant(i),COleVariant(j),COleVariant(cstr)); 
    分享到:
    掃一掃,關(guān)注光行天下的微信訂閱號!
    【溫馨提示】本頻道長期接受投稿,內(nèi)容可以是:
    1.行業(yè)新聞、市場分析。 2.新品新技術(shù)(最新研發(fā)出來的產(chǎn)品技術(shù)介紹,包括產(chǎn)品性能參數(shù)、作用、應(yīng)用領(lǐng)域及圖片); 3.解決方案/專業(yè)論文(針對問題及需求,提出一個解決問題的執(zhí)行方案); 4.技術(shù)文章、白皮書,光學(xué)軟件運用技術(shù)(光電行業(yè)內(nèi)技術(shù)文檔);
    如果想要將你的內(nèi)容出現(xiàn)在這里,歡迎聯(lián)系我們,投稿郵箱:service@opticsky.cn
    文章點評