在MFC对EXCEL进行操作所要做的环境配置

所参考的文章:

http://blog.sina.com.cn/s/blog_7702cfed01017ww4.html

http://blog.csdn.net/augusdi/article/details/5781102

http://www.cnblogs.com/guobbs/p/4238857.html


开发环境:Win7专业版64位 + VS2013 + Office2007


第一步:

在stdafx.h的头文件中:

#include <afxdisp.h> // MFC 自动化类 

在应用程序类的InitInstance函数中:

 // 初始化 OLE 库 
if (!AfxOleInit()) { AfxMessageBox(L"初始化OLE DLL失败!"); return FALSE; }

第二步:

Project->Class Wizard->Add Class->MFC Class From TypeLib,先选择要导入的组件所在的路径,即Excel.exe所在的路径,然后再选择要导入的Excel类型库中的接口。

主要关注几个_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range等几个接口。


第三步:

编译,由VS自动产生的导入代码存在以下几个问题:

(1)如果导入了多个接口,每个头文件都会把类型库导入一次,如果引用多个头文件,会导致类型库重复导入。

(2)Excel类型库中有些类型会跟MFC类库的某些类型冲突。

(3)Excel类型库的某些类型跟其他Office和VB的某些库相关,如果不导入相关库,将导致这些类型无法使用。

以上三点问题的解决方法如下:

(1)仅在_Application接口对应头文件中导入Excel类型库。

(2)对冲突的类型进行重命名。

(3)在导入Excel类型库之前,先导入Office和VB的相关库。更改后的导入类型库的代码如下(按照自己安装的Office目录做相应路径修改):

#import "C:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" \
rename("RGB", "MSORGB") \
rename("DocumentProperties", "MSODocumentProperties")
using namespace Office;


#import "C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"
using namespace VBIDE;


#import "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE" \
rename("DialogBox", "ExcelDialogBox") \
rename("RGB", "ExcelRGB") \
rename("CopyFile", "ExcelCopyFile") \
rename("ReplaceText", "ExcelReplaceText") \
no_auto_exclude
using namespace Excel;


第四步:

编译,会出现两个错误: 

\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足 

\crange.h(335): error C2059: 语法错误:“,” 

双击错误提示,定位在错误行:

VARIANT DialogBox()
    {
        VARIANT result;
        InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);
        return result;
    }
将该函数名前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值