日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转]VS2010+MFC解析Excel文件中数据

發布時間:2023/11/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]VS2010+MFC解析Excel文件中数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉自:http://www.vcfans.com/2010/08/vs2010-mfc-excel-file-in-the-data-analysis.html

?

前兩天折騰一個小功能,需求是解析Excel中的數據出來。網上一般使用的方案:
1. ODBC當數據庫來操作。
2. 使用第三方的類庫
3. 使用COM調用Excel.exe中的接口。

第三方類庫我怕MS升級版本后,是否仍然使用是個問號。使用ODBC的方案感覺很怪怪的,但據說不能修改刪除什么的,不過我沒有試驗,還是放棄此種方案。我最終還是使用COM來做的,本來是沒什么實現代碼,都是COM實現好的,沒什么可寫的。難點在于VS2010的版本與MSDN上的說法嚴重不一致,折騰死人。MSDN上說的方案是VC6.0的實現方法。而且加入COM后與VS的SDK庫沖突,無法編譯。下面說說我的使用方法。

第一步:初化COM接口。在InitInstance中加入如下代碼:

?[Copy to clipboard]View Code CPP
1 2 3 4 5 if(!AfxOleInit()){AfxMessageBox(_T( "Cannot initialize COM dll" ));return FALSE;}

第二步:向工程添加Excel的C++操作類。具體步驟見下圖:
1.Ctrl+Shift+X 打開類向導。

2.添加“類型庫中MFC類”。此處操作與VC6.0有很大的不一樣,讓我找了半天,如下圖:

3.添加需要的類文件。如下圖:

4.將剛才導入的類頭文件,加到模塊中。

?[Copy to clipboard]View Code CPP
1 2 3 4 5 6 #include "CApplication.h" #include "CWorkbooks.h" #include "CWorksheets.h" #include "CWorkbook.h" #include "CWorksheet.h" #include "CRange.h"

到此好像一切都結束了,下面就是寫調用上面載入的代碼了。But……,當你編譯時。MS將給你如下驚喜:

1>d:\xls\xls\debug\excel.tlh(74974): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(74974): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(74974): warning C4183: “GetMailEnvelope”: 缺少返回類型;假定為返回“int”的成員函數
1>d:\xls\xls\debug\excel.tlh(75683): error C2146: 語法錯誤: 缺少“;”(在標識符“HTMLProject”的前面)
1>d:\xls\xls\debug\excel.tlh(75683): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75683): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75693): error C2146: 語法錯誤: 缺少“;”(在標識符“CommandBars”的前面)
1>d:\xls\xls\debug\excel.tlh(75693): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75693): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75737): error C2146: 語法錯誤: 缺少“;”(在標識符“VBProject”的前面)
1>d:\xls\xls\debug\excel.tlh(75737): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75737): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75739): error C2146: 語法錯誤: 缺少“;”(在標識符“Permission”的前面)
1>d:\xls\xls\debug\excel.tlh(75739): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75739): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75741): error C2146: 語法錯誤: 缺少“;”(在標識符“SharedWorkspace”的前面)
1>d:\xls\xls\debug\excel.tlh(75741): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75741): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75743): error C2146: 語法錯誤: 缺少“;”(在標識符“Sync”的前面)
1>d:\xls\xls\debug\excel.tlh(75743): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75743): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75757): error C2146: 語法錯誤: 缺少“;”(在標識符“SmartDocument”的前面)
1>d:\xls\xls\debug\excel.tlh(75757): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75757): error C4430: 缺少類型說明符 – 假定為 int。注意: C++ 不支持默認 int
1>d:\xls\xls\debug\excel.tlh(75759): error C2146: 語法錯誤: 缺少“;”(在標識符“DocumentLibraryVersions”的前面)
1>d:\xls\xls\debug\excel.tlh(75759): fatal error C1003: 錯誤計數超過 100;正在停止編譯
========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========

我也不知道為什么造成這種結果,可能是由于這類接口是MS在N年前就弄好,后來VS升級了,相關接口也就年久失修了。造成我們這幫使用老技術的人的尷尬,后來求助于萬能的Google大俠,得到如下方案:

將剛才導入的幾個頭文件中的:

?[Copy to clipboard]Download download.txt
1 #import "D:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace

替換成:

?[Copy to clipboard]Download download.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #pragma region Import the type libraries#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52" \rename("RGB", "MSORGB") \rename("DocumentProperties", "MSODocumentProperties") // [-or-] //#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\MSO.DLL" \ // rename("RGB", "MSORGB") \ // rename("DocumentProperties", "MSODocumentProperties")using namespace Office;#import "libid:0002E157-0000-0000-C000-000000000046" // [-or-] //#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"using namespace VBIDE;#import "libid:00020813-0000-0000-C000-000000000046" \rename("DialogBox", "ExcelDialogBox") \rename("RGB", "ExcelRGB") \rename("CopyFile", "ExcelCopyFile") \rename("ReplaceText", "ExcelReplaceText") \no_auto_exclude // [-or-] //#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" \ // rename("DialogBox", "ExcelDialogBox") \ // rename("RGB", "ExcelRGB") \ // rename("CopyFile", "ExcelCopyFile") \ // rename("ReplaceText", "ExcelReplaceText") \ // no_auto_exclude#pragma endregion

到此搞定環境問題,下面就根據需求對Excel進行操作吧。

有圖有真像:

?

轉載于:https://www.cnblogs.com/freeliver54/archive/2012/10/12/2720785.html

總結

以上是生活随笔為你收集整理的[转]VS2010+MFC解析Excel文件中数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。