使用MFC自动化操作Excel文档
项目中要用到MFC操作Excel文件,在网上搜的结果,有把Excel当数据库处理的,也有直接操作Excel的,最终在MSDN上看到的结果,测试后觉得好用些。
使用基本步骤:
1、创建一个支持MFC的C++项目
2、加入一个从Excel的typelib派生的MFC类,下图为typelib列表:
应用程序 类型库 -------------------------------------------------- Microsoft Access 97 Msacc8.olb Microsoft Jet Database 3.5 DAO350.dll Microsoft Binder 97 Msbdr8.olb Microsoft Excel 97 Excel8.olb Microsoft Graph 97 Graph8.olb Microsoft Office 97 Mso97.dll Microsoft Outlook 97 Msoutl97.olb Microsoft PowerPoint 97 Msppt8.olb Microsoft Word 97 Msword8.olb Microsoft Access 2000 Msacc9.olb Microsoft Jet Database 3.51 DAO360.dll Microsoft Binder 2000 Msbdr9.olb Microsoft Excel 2000 Excel9.olb Microsoft Graph 2000 Graph9.olb Microsoft Office 2000 Mso9.dll Microsoft Outlook 2000 Msoutl9.olb Microsoft PowerPoint 2000 Msppt9.olb Microsoft Word 2000 Msword9.olb Microsoft Access 2002 Msacc.olb Microsoft Excel 2002 Excel.exe Microsoft Graph 2002 Graph.exe Microsoft Office 2002 MSO.dll Microsoft Outlook 2002 MSOutl.olb Microsoft PowerPoint 2002 MSPpt.olb Microsoft Word 2002 MSWord.olb Microsoft Office Access 2003 Msacc.olb Microsoft Office Excel 2003 Excel.exe Microsoft Graph 2003 Graph.exe Microsoft Office 2003 MSO.dll Microsoft Office Outlook 2003 MSOutl.olb Microsoft Office PowerPoint 2003 MSPpt.olb Microsoft Office Word 2003 MSWord.olb注意:这些类型库的默认位置是 C:/Program Files/Microsoft Office/Office(在 Office 2002 中,相应的路径为 C:/.../Office10;在 Office 2003 中,相应的路径为 C:/.../Office11),Dao350.dll 或 Dao360.dll 以及 Microsoft Office 10 (MSO.dll) 除外。Dao350.dll/Dao360.dll 的默认位置是 C:/Program Files/Common Files/Microsoft Shared/Dao。对于 Office 2002,MSO.dll 的默认位置是 C:/Program Files/Common Files/Microsoft Shared/Office10;对于 Office 2003,其默认位置是 C:/Program Files/Common Files/Microsoft Shared/Office11。
3、选择需要的Excel自动化接口,常用的有_Application/_Workbook/_Worksheet/Workbooks/Worksheet/Range等,接口类为Excel.h,Excel.cpp
(上述三步主要用来生产MFC的Excel接口类,测试结果,VC2005生成的Excel接口不好用,报了一堆的error,重定义什么的。参考网上的意见,用VC6生成了一个Excel接口,然后在VC2005直接使用这个接口了)
4、修改接口类的头文件,定义一个命名空间Excel,将接口类定义及实现包含起来,便以使用
5、在使用Excel接口的地方,引用Excel.h
使用注意事项:
1、在MFC项目中,如果没有启用COM服务库,启用COM服务库,示例如下:
2、加入必要的头文件,如<afxdisp.h>
3、Excel接口中有许多默认的Optional参数,对应MFC中的定义为:COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
4、部分Excel自动化接口用到的枚举常量,在MFC导出类中并没有,需要用的时候,可以查阅Excel VAB Reference,直接使用这些枚举常量的对应值。
Excel使用封装类:
为了便以使用,对Excel导出类做了简单的封装,代码如下:
(代码应用的excel.h为MFC导出类)
更多示例代码,参考:
http://support.microsoft.com/kb/178783/zh-cn
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q179706&ID=KB;EN-US;Q179706
内容参考来源于MSDN