MFC 與Excel檔案的互動操作

2022-08-02 11:54:14 字數 3345 閱讀 9359

假日快要結束了。帶著沉重的心情寫下之前關於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...