假日快要結束了。帶著沉重的心情寫下之前關於mfc與excel檔案互動的總結。
因為vs的版本號不同可能在操作上有些差異。所以在此指明下本篇文章的project環境為vs2013
,也建議大家用最新的。
說到程式對於excel的操作,應該不能算是什麼新需求了。方法也有好幾種,諸如利用office提供的介面、開原始碼之類的。本文在查了一些資料之後選擇了實現起來較為反便的一種。事實上現的方法基本上全然照抄的這篇文章的,假設看本篇不大明確的能夠去看看。
參考的文章說。「
踏破鐵鞋無覓處。得來費死了工夫
」。然而進過了博主的努力,後人須要做的也就是看一看,抄一抄就完事了。
開源的力量偉大至極
,本篇將發揚博主的精神。在整理內容的同一時候,寫出乙個
demoproject
以下開始主要內容
第一步:建立乙個空的mfc對話方塊project
第二步:下拉vs選單條的「專案」項。選擇加入類。在彈出對話方塊中選中「typelib中的mfc類」,點選加入。彈出「從型別庫加入類嚮導」對話方塊。
第三步:彈出的對話方塊例如以下圖,「從下面**加入類」中有兩個選項,假設選擇的是「登錄檔」,在「可用的型別庫」中選擇「microsoft excel
15.0 object library<1.8>」(office版本號不同可能有些許差異,這個是office2013)。假設選擇的是「檔案」,則"位置"選擇office安裝路徑下的excel.exe,本人32位office的預設安裝,路徑為「c:\program files (x86)\microsoft office\office15\excel.exe」。上面兩個選項達到的效果是一樣的,僅僅是路徑不同而已,做完效果例如以下:
第五步:做完第四步後,project中會多出幾個匯入類的標頭檔案「
"c:\\program files (x86)\\microsoft office\\office15\\excel.exe" no_namespace」(路徑可能不同)都凝視掉。
例如以下圖:
第六步:既然有標頭檔案,自然就要包括這些標頭檔案啦,在須要呼叫的檔案頭寫入例如以下**:
#include "crange.h"
#include "cworkbook.h"
#include "cworkbooks.h"
#include "cworksheet.h"
#include "cworksheets.h"
第七步:這個時候按理說環境已經是搭建好了,可是點選編譯還是會報出語法錯誤,幸好前文提到的部落格也給出了解決方法,定位到"crange,h",將
variant dialogbox()中的dialogbox改為_
dialogbox,如今編譯就沒有問題了。接下來呼叫就能夠了,呼叫**例如以下:
cworkbooks books;
cworkbook book;
cworksheets sheets;
cworksheet sheet;
crange range;
lpdispatch lpdisp;
colevariant vresult;
colevariant covoptional((long)disp_e_paramnotfound, vt_error);
cstring path = l"demo.xlsx";//檔案路徑
tchar szpath[max_path];//獲得當前執行路徑
getmodulefilename(null, szpath, max_path);
cstring pathname(szpath);
pathname=pathname.left(pathname.reversefind(_t('\\')) + 1);
lpdisp = books.open(pathname+path, covoptional, covoptional, covoptional, covoptional, covoptional, covoptional, covoptional, covoptional, covoptional, covoptional, covoptional, covoptional, covoptional, covoptional);
book.attachdispatch(lpdisp);//得到workbook
sheets.attachdispatch(book.get_worksheets());//得到worksheets
lpdisp = book.get_activesheet();//得到當前活躍sheet,假設有單元格正處於編輯狀態中,此操作不能返回。會一直等待
sheet.attachdispatch(lpdisp);
//讀取第rows行、第cols列單元格的值
/*假設遍歷則重複執行這段**並推斷界限*/
int rows = 1, cols = 2;
range.attachdispatch(sheet.get_cells());
range.attachdispatch(range.get_item(colevariant((long)rows), colevariant((long)cols)).pdispval);
vresult = range.get_value2();
cstring data;
if (vresult.vt == vt_bstr)//字串
else if (vresult.vt == vt_r8)//8位元組的數字
else if(vresult.vt==vt_empty)//單元格空的
messagebox(data);
/*假設遍歷則重複執行這段**並推斷界限*/
//釋放物件
books.close();
range.releasedispatch();
sheet.releasedispatch();
sheets.releasedispatch();
book.releasedispatch();
books.releasedispatch();
ok,到此便實現了excel資料的讀取,至於建立和寫入也幾乎相同,以後實用到再加入上來。
python 與 mongodb的互動 更新操作
這裡只要討論python與mongod互動的時候insert的問題 1 from pymongo import 2def insert func 3try 4 client obj mongoclient port 27017,host localhost 5 db client obj.test6...
C 與EXCEL的資料互動
excel的呼叫,如果不熟悉,請參考msdn中的 使用 excel物件模型實現 excel自動化 一 datatable to excel 先定義一下 private private private excel.worksheet excelsheet excel.worksheet excelbo...
Excel與SQL Server資料互動
第一部分 在excel匯入sql server中的資料 在 資料 選項卡上的 獲取外部資料 組中,單擊 自其他 然後單擊 來自sql server 在 伺服器名稱 框中,鍵入要連線的 sql server 計算機的名稱。在 登入憑據 下,執行下列操作之一 要使用當前的 microsoft windo...