zoukankan      html  css  js  c++  java
  • VC操作Excel2003,Word2003的两种方式

    开发工具:vs2008+sp1

    office:2003及一上版本(开发引入office11,实际使用软件office14)

    在工作中很多次遇到需要操作office文件的内容,上网搜索查询资料,查到的大部分都是比较老的资料。大部分资料都是侧重于介绍功能的实现,却详细介绍开始环境的搭建,所以对初学者带来了很多困惑,特别是包含库的过程中经常遇到各种错误,如果同时使用excel,word,ado,那么问题可能更多。所以本文主要是介绍怎么把环境搭起来,不涉及到具体的操作。

    office软件提供了com库给我们进行操作,vc操作com库有三种方式

    1,使用com库函数

    2,使用类向导导入类型库

    3,使用#import命令

    如果是我们自己写的库函数,可以使用第一种方式,所以我这里就介绍第二和第三种方式

    使用类向导导入类型库

    1、新建了MFC工程,添加类

    2、添加需要的类

    注意,我这里对类的名字进行重命名了,因为我这里还是准备要用到word的,这两个默认的名称都是CApplication,如果检测到重名了,就好自动加数字(CApplication0)。

    如果是用以前的版本,默认的名称是excel,所有的类都是生成到一个文件里面的。2008默认是在单独的文件里面,当然也可以指定到同一个文件里,我自己试了一下,发现有的时候是成功,有的时候失败,不是很稳定,所有建议还是分开吧。

    3、此时编译工程,就会报出很多错误,

    error C2371: “FontPtr”: 重定义

    error C2786: “BOOL (__stdcall *)(HDC,int,int,int,int)”: __uuidof 的操作数无效

    error C2923: “_com_IIID”:“Rectangle”不是参数“<未知>”的有效 <未知> 类型变量

    error C3203: “_com_IIID”: 未专用化的类 模板 不能用作 模板 变量,该变量属于 模板 参数“_IIID”,应为 real 类型 

    error C2504: “_IMsoDispObj”: 未定义基类

    。。。。。。

    超多的错误,我就不一一列举了

    解决方法:在生成的文件里面,找到"C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace 删除掉就可以了。

    ps:操作word的方法和excel是一样的,库文件是MSWORD.OLB

    使用#import命令

    1、新建工程,引入库

    #import "C:\Program Files\Common Files\Microsoft Shared\OFFICE12\mso.dll" rename("RGB", "MSRGB")
    #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" raw_interfaces_only, \
    rename("Reference", "ignorethis")
    #import "C:\Program Files\Microsoft Office\OFFICE11\excel.exe" exclude("IFont", "IPicture") \
    rename("RGB", "ignorethis"), rename("DialogBox", "ignorethis") \
    rename("ReplaceText", "JOEReplaceText"), rename("CopyFile","JOECopyFile"), \
    rename("FindText", "JOEFindText"), rename("NoPrompt", "JOENoPrompt")
    #import "C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB" raw_interfaces_only \
    rename("FindText","WordFindText") \
    rename("Rectangle","WordRectangle") \
    rename("ExitWindows","WordExitWindows") \
    rename("Table","WordTable")

    using namespace Office;
    using namespace VBIDE;

    2、编译,引入的库没有冲突,就可以使用了。

    网上的资料介绍大部分为使用类向导的,不知这是由于之前不支持import方法,还是第一个人采用了类向导的方式,然后大家就互相抄来抄去。我个人认为采用import的方式比较好,用起来很方便。

    参考资料:http://www.cnblogs.com/highmayor/archive/2008/01/18/1044108.html

    示例代码下载

    使用类向导导入类型库

    使用#import命令

  • 相关阅读:
    Jmeter之检查点
    Jmeter之集合点
    Jmeter之参数化
    Jmeter组件认识
    Jmeter目录认识
    sts的web工程创建
    Jmeter的BeanShell脚本开发
    Jmeter插件开发
    Appium配置app老是反复安装问题的处理
    eclipse通过git代码的下载和上传
  • 原文地址:https://www.cnblogs.com/junyuz/p/3027910.html
Copyright © 2011-2022 走看看