1. 程式人生 > >MFC寫入xls檔案示例

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中下載。