在AutoCAD中動(dòng)態(tài)讀取Excel數(shù)據(jù)的方法
隨著Automation編程技術(shù)的出現(xiàn),我們可以很方便地實(shí)現(xiàn)這一點(diǎn)了,下面是個(gè)ObjectARX的例子,其功能是動(dòng)態(tài)關(guān)聯(lián)Excel,然后讀取其數(shù)據(jù),并將這些數(shù)據(jù)打印在文本域中。
在實(shí)際的工作中,我們經(jīng)常要對(duì)一些表格數(shù)據(jù)進(jìn)行處理,如果先把這些表格數(shù)據(jù)通過Excel處理,再導(dǎo)入到AutoCAD,那絕對(duì)會(huì)起到事半功倍的效果。隨著Automation編程技術(shù)的出現(xiàn),我們可以很方便地實(shí)現(xiàn)這一點(diǎn)了,下面是個(gè)ObjectARX的例子,其功能是動(dòng)態(tài)關(guān)聯(lián)Excel,然后讀取其數(shù)據(jù),并將這些數(shù)據(jù)打印在文本域中。
//動(dòng)態(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é)束時(shí)COM庫會(huì)自動(dòng)釋放 if(!AfxOleInit()) { MessageBox(NULL,"初始化COM支持庫失敗!\n無法控制Excel!", \ "TrueTable",MB_IConERROR | MB_OK); return RTERROR; } //關(guān)聯(lián)已經(jīng)運(yùn)行的Excel實(shí)例 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**)&pUnk); if(SUCCEEDED(hr)) { hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pRunDisp); break; } ::Sleep(10); } if (!pRunDisp) { ::MessageBox(NULL, "沒有發(fā)現(xiàn)Excel!", "TrueTable", MB_ICONHAND); return RTERROR; } if (pUnk) pUnk->Release(); //關(guān)聯(lián)Excel app.AttachDispatch (pRunDisp); //得到當(dāng)前活躍sheet //如果有單元格正處于編輯狀態(tài)中,此操作不能返回,會(huì)一直等待 lpDisp=app.GetActiveSheet(); if(lpDisp==NULL) { MessageBox(NULL, "沒有發(fā)現(xiàn)有效的表格!", \ "TrueTable",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("\n%s",SheetName); if(col_num<2 && row_num<2) //此sheet為空 { MessageBox(NULL,"\n當(dāng)前表格沒有數(shù)據(jù)!", \ "TrueTable",MB_IConERROR | MB_OK); app.ReleaseDispatch (); return RTERROR; } else { ads_printf("\n表格%s共%d行,%d列",SheetName,row_num,col_num); } //得到全部Cells,此時(shí),range是cells的集合 range.AttachDispatch(sheet.GetCells()); //讀寫數(shù)據(jù)了 CString cstr; ads_printf("\n"); 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("%s ",(LPTSTR)cstr); } ads_printf("\n"); } //釋放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)); |

1.行業(yè)新聞、市場(chǎng)分析。 2.新品新技術(shù)(最新研發(fā)出來的產(chǎn)品技術(shù)介紹,包括產(chǎn)品性能參數(shù)、作用、應(yīng)用領(lǐng)域及圖片); 3.解決方案/專業(yè)論文(針對(duì)問題及需求,提出一個(gè)解決問題的執(zhí)行方案); 4.技術(shù)文章、白皮書,光學(xué)軟件運(yùn)用技術(shù)(光電行業(yè)內(nèi)技術(shù)文檔);
如果想要將你的內(nèi)容出現(xiàn)在這里,歡迎聯(lián)系我們,投稿郵箱:service@www.whymw.com
文章點(diǎn)評(píng)
機(jī)械軟件
24小時(shí)人氣排行
- 麻省理工物理學(xué)家提出首個(gè)“中微子激光”概念
- 給分子裝上“GPS + 驗(yàn)金筆”:三維目標(biāo)鎖定單分子光譜動(dòng)態(tài)顯微鏡
- 研究人員復(fù)興針孔相機(jī)技術(shù)以推動(dòng)下一代紅外成像發(fā)展
- 線偏振和圓偏振的區(qū)別
- 新疆理化所在紅外非線性光學(xué)晶體材料研究獲進(jìn)展
- 我國研究團(tuán)隊(duì)在單周期飛秒激光產(chǎn)生與表征研究取得進(jìn)展
- 我國單光子探測(cè)器實(shí)現(xiàn)重大突破
- 福建師大在金屬團(tuán)簇X射線成像領(lǐng)域取得重要進(jìn)展
最新文章
- 福建師大在金屬團(tuán)簇X射線成像領(lǐng)域取得重要進(jìn)展
- 上海光機(jī)所在新型雙光梳溫室氣體高精度檢測(cè)技術(shù)方面取得重要突破
- 山西大學(xué)在磁性量子材料光電特性研究中取得重要進(jìn)展
- 我國單光子探測(cè)器實(shí)現(xiàn)重大突破
- 國防科大在高功率激光柔性傳輸領(lǐng)域獲得重要進(jìn)展
- 山東師范大學(xué)在超維時(shí)空光場(chǎng)調(diào)控領(lǐng)域取得重要進(jìn)展
- 上海光機(jī)所在表面模調(diào)控光子帶隙空芯光纖研究中獲系列進(jìn)展
- 我國研究團(tuán)隊(duì)在單周期飛秒激光產(chǎn)生與表征研究取得進(jìn)展
- 山東師大在先進(jìn)光學(xué)調(diào)控方面取得進(jìn)展
- 一文讀懂:什么是雜散光?




