VC调用excel问题,office版本、初始化

  1. 添加与 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()” 即可。

  1. 初始化问题
    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
}

再编译运行,一切正常。

  1. 参考资料
    https://www.cnblogs.com/tongye/p/10212901.html
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值