- 添加与 Excel 操作相关的头文件
此处遇到的问题:
电脑上本身安装了Office2013,使用VS2010、VS2012、VS2017,添加头文件,编译后报很多错误,网上查询无解决方法,卸载Office2013,安装office2003后编译正常,以下操作基于Office2003+VS2017
项目 -> 类向导->添加类->类型库中的MFC类
在注册表选项右侧下拉选择Microsoft Excel 11.0 Object Library,此处用的office2003,其他版本版本号有变化。
若注册表中没有excel,选择“文件”,手动定位到excel.exe的位置
在接口中选择其中的: _Application、_Workbook、_Worksheet、Workbooks、Worksheets、Range 并添加,然后在主程序中添加其头文件:(如需要处理字体等,还需添加Font)
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
逐次打开上述头文件,并将其中的 “ #import “C:\Program Files (x86)\Microsoft Office\OFFICE11\EXCEL.EXE” no_namespace" 这句话给屏蔽掉,不然会报错,无法编译成功。这样之后,编译还是不能通过,会出现以下报错:
双击来到报错处,在 DialogBox() 前面加上下划线 “_”,即 “_DialogBox()” 即可。
- 初始化问题
MFC对话框程序,在按钮响应函数中,创建ExcelApp
if (!m_ExcelApp.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox(_T("创建Excel失败"), MB_OK | MB_ICONWARNING);
return ;
}
编译运行,点击按钮,可长正常运行。考虑到该exe需要后台运行,不显示窗体,处理完excel后自动关闭对话框,于是有了以下代码,在OnInitDialog()中调用按钮响应函数,完成后关闭对话框:
ShowWindow(SW_HIDE);
OnBnClickedButton1();
CDialog::OnCancel();
编译,运行,弹框报错“创建Excel失败”。需要在调用之前增加一段初始化:
HRESULT hr;
hr = CoInitialize(NULL);
if (FAILED(hr))
{
AfxMessageBox(_T("Failed to call Coinitialize
}
再编译运行,一切正常。