我们在开发MFC、VC、C++项目时,有时候需要操作excel文件的读写,我们一般常用方式是调用微软的excel驱动方式调用,但调用驱动前,我们需要生成我们C++能够调用到的头文件,一般常用文件有:
#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
#include "CFont0.h"
Excel作为OLE/COM库插件,定义好了各类交互的接口,这些接口是跨语言的接口。VC可以通过导入这些接口,通过接口来对Excel的操作,导入OLE/COM库插件方式根据vs不同版本参考如下:
如何在vs2017及以前版本(vs2010、vs2015)上添加 添加类型库中的MFC类
如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类)
由于本文只关心对Excel表格中的数据的读取,主要关注7个接口类_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range、Font0。
那我们如何导入Excel插件呢,我们使用vs2022来举例。
1、右键项目—添加—选择“新建项”
2、选择Visual C++—MFC—TypeLib中的MFC类—添加
3、在实现接口的位置的下拉列表中,选择“文件”
4、选择excel.exe所在路径
注:我是提前通过everything工具搜索到文件后,直接拷贝到项目根目录。
5、分别在“可用接口”一栏,将_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range、Font0类选择到“实现接口”一栏。
6、点击确定按钮后,即可生成我们需要的类。
7、在头文件生成后,需要把这几个头文件里的导入代码屏蔽,因为后续不需要再重新导入。
8、由于CFont类和C++默认CFont类重定义,所以直接修改CFont类为CFont0,并修改文件名为CFont.h
9、由于CRange.h中DialogBox函数编译报错
如果有错误error C2059双击error C2059,将VARIANT DialogBox()改成VARIANT _DialogBox()。
1>C:\Users\ExcelDemo\ExcelDemo\CRange.h(335,10): warning C4003: 类函数宏的调用“DialogBoxW”参数不足
1>(编译源文件“/ExcelDemoDlg.cpp”)
1>C:\Users\ExcelDemo\ExcelDemo\CRange.h(335,10): error C2059: 语法错误:“,”
再次编译,通过。
生成开始于 15:35...
1>------ 已启动生成: 项目: ExcelDemo, 配置: Debug x64 ------
1>ExcelDemoDlg.cpp
1>ExcelDemo.vcxproj -> C:\Users\yangguangjin\Documents\work\TestDemo\ExcelDemo\x64\Debug\ExcelDemo.exe
========== 生成: 1 成功,0 失败,0 最新,0 已跳过 ==========
========== 生成 于 15:35 完成,耗时 02.565 秒 ==========