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

猜你喜欢

转载自blog.csdn.net/liji_digital/article/details/82320287
今日推荐