MFC寫入xls檔案示例
本文受了https://blog.csdn.net/weileshenghuo1/article/details/39554037以及http://club.excelhome.net/thread-937818-1-1.html的啟發。
1)計算機上要 安裝office 2007
2) 利用 VS2008建立MFC工程,基於對話方塊的
3) project->add class->MFC class from typelib(專案->新增類->Typelib中的MFC類) ,選擇檔案,匯入EXCEL.EXE(excel 2007,這個檔案在你excel 安裝目錄的 Office12下面)
4) 選中以下幾項_Application,_WorkSheet,_WorkBook,WorkSheets,WorkBooks,Range,然後匯入,匯入後會自動在工程中加入CApplication,CWorkSheet,CWorkBook,CWorkSheets,CWorkBooks,CRange這些類;然後需要把這些類的標頭檔案中的第一句話#"......EXCEL.EXE" nonamespace刪除,然後將CRange類中的
VARIANT DialogBox()
{
VARIANT result;
InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);
return result;
}
DialogBox前面加“_“變為_DialogBox
5)在想要定義xls操作的檔案一開頭包括相關的標頭檔案:
#include "CApplication.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
6) 定義xls寫入操作:
CApplication app1; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CRange range; CRange iCell; LPDISPATCH lpDisp; COleVariant vResult; COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); app1.put_Visible(false);//這句話控制xls檔案是否出現在介面上 if(!app1.CreateDispatch(_T("Excel.Application"),NULL)) { AfxMessageBox(_T("無法啟動Excel伺服器!")); return; } books.AttachDispatch(app1.get_Workbooks()); lpDisp = books.Open((LPCTSTR)"F:\\test.xlsx",covOptional, covOptional, covOptional , covOptional, covOptional,covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional,covOptional); book.AttachDispatch(lpDisp); //得到Worksheets sheets.AttachDispatch(book.get_Worksheets()); //得到當前活躍sheet //如果有單元格正處於編輯狀態中,此操作不能返回,會一直等待 lpDisp=book.get_ActiveSheet(); sheet.AttachDispatch(lpDisp); //讀取第一個單元格的值 range.AttachDispatch(sheet.get_Cells()); range.put_Item(COleVariant(long(1)),COleVariant(long(1)),COleVariant(_T("oo"))); /*app1.put_Visible(false);*/ app1.put_UserControl(TRUE); book.Save(); book.put_Saved(true); app1.put_DisplayAlerts(false);//關閉時不再談出詢問是否儲存的對話方塊 //向單元格(1,1)寫入"so",這個是在已知的E:\\test.xlsx中寫入 books.Close(); app1.Quit(); range.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); app1.ReleaseDispatch();
網上有一些介紹xls寫入的教程,介紹的有不到位之處:由於這些教程沒有呼叫book.save(); book.put_Saved(true); app1.put_DisplayAlerts(false);,導致寫入之後還會有對話方塊彈出來,詢問是否儲存xls檔案。解決辦法就是呼叫以上3句。
我的示例程式碼可以在https://download.csdn.net/download/liji_digital/10648256中下載。