VS2010 MFC讀取Excel檔案中資料

2021-08-10 10:56:03 字數 3231 閱讀 4121

前段時間寫個工具需要從excel檔案中讀取資料,excel**資料列數為確定值,行數不確定,從網上搜了些方法嘗試,最終達到目的,總結如下:

1. 新建乙個基於對話方塊的mfc應用程式

2. 新增excel相關類

//#import "d:\\program files (x86)\\microsoft office\\office14\\excel.exe" no_namespace
在stdafx.h中新增:

#include "crange.h"

#include "cworkbook.h"

#include "cworkbooks.h"

#include "cworksheet.h"

#include "cworksheets.h"

4. 編譯出現錯誤:

1>e:\vs2010_project\demo\mfcexcel\crange.h(335): warning c4003: 「dialogboxw」巨集的實參不足

1>e:\vs2010_project\demo\mfcexcel\crange.h(335): error c2059: 語法錯誤:「,」

解決方法:定位錯誤資訊,在crange類中將dialogbox()改為_dialogbox()

variant _dialogbox()

5. 獲取excel檔案路徑全名(包括檔名)

void cofflinedlg::onbnclickedbuttonopenfile()

}

strpath為cstring型別的對話方塊成員變數,用於儲存路徑

6. 讀取excel中資料

新增乙個讀取資料按鈕,按鈕單擊訊息處理函式:

void cofflinedlg::onbnclickedbuttonreaddata()

getdlgitem(idc_button_readdata)->enablewindow(false);

cworkbooks books; //工作簿集合

cworkbook book; //工作簿

cworksheets sheets; //工作表集合

cworksheet sheet; //工作表

crange range; //使用區域

colevariant covoptional((long)disp_e_paramnotfound, vt_error);

book.attachdispatch(books.add(_variant_t(strpath)));//獲取選擇的excel檔案

sheets.attachdispatch(book.get_worksheets(),true);//獲取檔案中的所有sheet

sheet.attachdispatch(sheets.get_item(_variant_t("sheet1")),true);//獲取sheet1區域

vstrcyclesets.clear();

vstrcmdseque.clear();

vstrsenddata.clear();

vstrexpectdata.clear();

vstrtimeout.clear();

vstrcheck.clear();

vstrcyclecnt.clear();

cstring str;

bool bexit = false;

for(int irow=2;!bexit;irow++)

vstrcyclesets.push_back(str);

break;

case 2: str = range.get_value2();

vstrcmdseque.push_back(str);

break;

case 3: str = range.get_value2();

str.replace(" ", "");

vstrsenddata.push_back(str);

break;

case 4: str = range.get_value2();

str.replace(" ", "");

vstrexpectdata.push_back(str);

break;

case 5: str = range.get_value2();

vstrtimeout.push_back(str);

break;

case 6: str = range.get_value2();

vstrcheck.push_back(str);

break;

case 7: str = range.get_value2();

vstrcyclecnt.push_back(str);

break;

default: ;

}if(bexit)

}} range.releasedispatch();//釋放物件

sheet.releasedispatch();

sheets.releasedispatch();

book.releasedispatch();

books.releasedispatch();

if(!vstrcyclesets.empty())

else

getdlgitem(idc_button_readdata)->enablewindow(true);

}

我讀取的excel**資料列數固定為7,資料不確定所以行數不確定,第一行為表頭,所以從第二行a2單元格開始讀,通過ai是否為空來判斷資料是否讀完。採用容器來儲存資料物件比較方便,容器定義為對話方塊成員變數:

//儲存excel讀取的資料

vectorvstrcyclesets;

vectorvstrcmdseque;

vectorvstrsenddata;

vectorvstrexpectdata;

vectorvstrtimeout;

vectorvstrcheck;

vectorvstrcyclecnt;

至此,就完成了從excel中讀取資料。

VS2010 MFC開發學習筆記

做了一段mfc的開發,從零開始真的很難受,倒不是軟體難用,也不是語言難學,主要是好多功能不知道實現的函式,這裡把我用到的函式列出來,僅供參考 控制項操作 控制項顯示getdlgitem idc static display showwindow sw show 控制項隱藏getdlgitem idc...

vs2010 MFC設定控制項背景透明

通常要設定控制項背景色透明,原因是在對話方塊背景中使用了。對於這種情況,在vs2010中應當呼叫setbackgroundimage函式來實現背景的顯示。bool cmfcdlg oninitdialog 因為vs2010中對話方塊是派生cdialogex的,所以可以使用該函式來完成對應功能。呼叫後...

《VS2010 MFC程式設計入門教程》 讀書筆記

推薦兩個比較好的學習 mfc全稱microsoft foundation classes windows sdk software development kit,軟體開發工具包 new project win32 project是win32程式,empty project是空程式,mfc dll用...