VS2008環境使用MFC操作讀取excel檔案

2021-09-08 09:14:47 字數 3278 閱讀 6805

1. 建立

mfc工程,

mdi(基於對話方塊),其他預設即可。

2. 操作

excel

檔案初始化:

a. project->add class->mfc class from typelib (專案

->

新增類->typelib

中的mfc

類)匯入

excel.exe

,一般都在

c:/program files/microsoft office/office12

路徑下(即選擇你的

office

安裝路徑下的

excel.exe

加入)

b. 選中以下幾項

,然後匯入;

c. 匯入後自動在工程中新增

這些類;

然後需要把這些類的標頭檔案中的第一句話 #import ".......excel.exe" nonamespace 

刪除;

引入之後如果編譯遇到錯誤,not enough actual parameters for macro 'dialogboxw'. 

讓人頭疼!

解決方法是在crange

類中,

[cpp] view plain

copy

1. variant dialogbox()  

2.   

dialogbox()前面新增下劃線變成

_dialogbox()

,解決了!

3.操作

excel檔案

在「資源

」裡面選擇

mfc自動建立的對話方塊,雙擊「開啟

」按鈕(若沒有就自己做乙個),然後程式會將你到對這個按鈕的函式裡,在函式中寫如下內容: (檔案是

c***dlg.cpp  ***

是你的專案名稱)

[cpp] view plain

copy

1. void cexcel開啟

3dlg::onbnclickedok()  

2.   

20.     lpdisp = books.open(「d: covoptional, covoptional, covoptional, covoptional,covoptional, covoptional, covoptional, covoptional, covoptional,covoptional, covoptional, covoptional,covoptional);  

21.       

22.     //得到

workbook

23.     book.attachdispatch(lpdisp);  

24.     //得到

worksheets

25.     sheets.attachdispatch(book.get_worksheets());  

26.    

27.     //得到當前活躍

sheet

28.     //如果有單元格正處於編輯狀態中,此操作不能返回,會一直等待

29.     lpdisp=book.get_activesheet();  

30.     sheet.attachdispatch(lpdisp);  

31.     //讀取第乙個單元格的值

32.     range.attachdispatch(sheet.get_cells());  

33.     range.attachdispatch(range.get_item (colevariant((long)2),colevariant((long)1)).pdispval );  

34.     /*colevariant*/ vresult =range.get_value2();  

35.     cstring str;  

36.     if(vresult.vt == vt_bstr) //字串

37.       

40.     else if (vresult.vt==vt_r8) //8位元組的數字

41.       

44.    

45.     /*else if(vresult.vt==vt_date) //時間格式

46.      

50.     else if(vresult.vt==vt_empty) //單元格空的

51.     */    

54.     books.close();   

56.     //釋放物件

57.     range.releasedispatch();  

58.     sheet.releasedispatch();  

59.     sheets.releasedispatch();  

60.     book.releasedispatch();  

61.     books.releasedispatch();  

63.     onok();  

64.     messagebox(str);  

65. }  

開始有乙個教程沒有如下**(上乙個**框已包含)

[cpp] view plain

copy

1.         books.close();   

3. //釋放物件

4. range.releasedispatch();  

5. sheet.releasedispatch();  

6. sheets.releasedispatch();  

7. book.releasedispatch();  

8. books.releasedispatch();  

這樣會導致程式在關閉以後仍然有

excel

的程序存在,檔案不關閉,使用以上**後解決。

另外,在這個檔案的前端記得加入:

[cpp] view plain

copy

2. #include "crange.h"  

3. #include "cworkbook.h"  

4. #include "cworkbooks.h"  

5. #include "cworksheet.h"  

6. #include "cworksheets.h"  

執行結果是,程式會將

d:/test.xls

開啟,並且在對話方塊中輸入格

(1,1)

的資料。

VS2008環境使用MFC操作讀取excel檔案

使用軟體vs2008excel版本2003 xls 親測可用 變動 之所以找的困難,很大一部分是因為 不能轉移。現在說一下主要的變動,應該是版本的問題。1 字串前加上l,如l fox 這是unicode的原因。2 有些函式不一樣了,與第乙個鏈結,比如getvalue,現在應該寫成get value,...

vs2008環境下使用zlib庫

2.工程裡 編寫 include pragma comment lib,zdll.lib 即可開始呼叫zlib的api函式 3.1 int compress bytef dest,ulongf destlen,const bytef source,ulong sourcelen 把源緩衝壓縮成目的緩...

NTL使用方法(VS2008環境下)

首先必須要有ntl.lib,這是我們通過源 手動生成的,具體方法參考前一篇部落格 vs2008生成 lib檔案 接著我們測試ntl是否能用,具體步驟如下 檔案 新建 專案 空專案,專案名為ntl test,然後將winntl 5 5 2 include的整個目錄,winntl 5 5 2 tests...