用VC++操作WORD(1)——综述

来源:互联网 发布:淘宝侵权管辖 编辑:程序博客网 时间:2024/05/19 23:04

写在前面:

        10.1长假前,导师给安排了任务,做一些用VC++操作WORD进行自动化文档生成的工作。于是乎我百度了许多代码,又看了许多帖子。以前很少接触COM/OLE编程,奈何网上一些基础的东西都是只言片语东鳞西爪,于是乎决定把自己最近所得写成博文来供后人使用。文本一家之言,如有错误欢迎指出。

        在学习过程中,我使用的是VS2005+OFFICE2003,在其他环境下是否会产生错误暂不知晓。

 

1.用VC++操作WORD的基本思路

        由于以前做过一些图像方面的东西,而且又没接触过COM编程(在百度之前对怎么操作WORD很迷茫,纯粹闭门造车)。于是产生了我的第一个思路,就像生成BMP文件那样,查找文件头格式,和内容格式,以及一些相关的加密/压缩方法,用二进制的方式,调用CreateFile之类的API来进行操作。

         但是,没过多久,我就发现这个思路不成立,这玩意真心找不到相关资料。所以就采用了现在网上一些已经成熟的技术:导入TypeLib类,利用MS提供的COM接口来进行操作。而且再后面的实践中,我发现这样做其实还是很简单的。而且兼容性还算不错。我尝试使用基于OFFICE2000下面编写的代码在安装03或07的机器上运行,简单代码依然可以正确执行,并无什么BUG出现。

 

2.在自己的工程中引入COM接口

       这是使用VC++进行WORD编程的第一步,例如VS05:项目——添加类——MFC——TypeLib中的类。然后再来源中选择文件,选择相应的exe或olb文件即可。例如,我的OFFICE安装在E盘,我要进行WORD编程,那么就如下图:

 

上面两个红圈的位置就是我刚才说的东西。下面一节介绍一下接口和生成的类。

 

3.添加你所需要的类到你的项目中

       如上图所示,在实际编程过程中,你需要进行什么操作就添加哪个接口就OK了,由于存在一些重名的问题,所以VS会自动的在一些类名后面加上0,。下面介绍一些必须添加的或者常用的接口:

Application:代表MSWORD程序实例。

Documents:代表所有打开文档的集合。

Document:代表一个打开的文档,一般都是当前正在操作的文档。

Selection:这个接口有两个可能,1是当前光标选择的区域,2是当前光标的位置,联系一下我们平时实际对WORD的操作,很容易搞明白。

以上这些是必须要导入的几个接口,下面说一些常用操作会使用到的接口。

Table和Cell:这两个大类是插入并控制表格时候使用的。

nlineSharp:这个是插图图片时候使用的。

 

4.必须添加的一些内容

       经过百度,有一些预定义的东西是必须加入的,比如说为了避免MS的EXITWINDOWS和API重名,需要对其重命名等等,这些都是百度来的(忘记引用自哪个兄弟的BLOG了,在这里先感谢一下)。具体代码如下:

PS:以下代码添加在stdafx.h中,随便找个位置就OK~

#define OFFICEXP 1#define OFFICE2000 2// Default Settings#define OFFICE_VER OFFICEXP#define _M2STR(x) #x#define M2STR(x) _M2STR(x)// Ignore hard wired default paths if MSDLL_PATH is// defined from the command line#ifndef MSDLL_PATH// Paths to required MS OFFICE files.// Make sure these paths are correct for your  machine#pragma message ("Make sure the path to MSO DLL is correct.")#if OFFICE_VER == OFFICEXP#define _MSDLL_PATH "C:/Program Files/Common Files/Microsoft Shared/Office11/MSO.DLL"#elif  OFFICE_VER == OFFICE2000#define   _MSDLL_PATH "C:/Program Files/Microsoft Office/Office/MSO9.dll"#endif#else#define _MSDLL_PATH M2STR(MSDLL_PATH)#endif//// Delete the *.tlh files when changing import qualifiers#import _MSDLL_PATH rename("RGB", "MSRGB") rename("DocumentProperties", "WordDocumentProperties") raw_interfaces_only#ifdef VBE6EXT_PATH#import M2STR(VBE6EXT_PATH) #else#import "C:/Program Files/Common Files/Microsoft Shared/VBA/VBA6/VBE6EXT.OLB" raw_interfaces_only#endif// Ignore hard wired default paths if MSWORDOLB_PATH is// defined from the command line#ifndef MSWORDOLB_PATH#pragma message ("Make sure the path to MSWORD OLB is correct.")#if OFFICE_VER == OFFICEXP#define _MSWORDOLB_PATH "E:/Program Files/Microsoft Office/OFFICE11/MSWORD.OLB"#elif  OFFICE_VER == OFFICE2000#define _MSWORDOLB_PATH "C:/Program Files/Microsoft Office/Office/MSWORD9.OLB"#endif#else#define _MSWORDOLB_PATH M2STR(MSWORDOLB_PATH)#endif#import _MSWORDOLB_PATH rename("ExitWindows", "WordExitWindows") rename("FindText", "WordFindText") raw_interfaces_only#pragma warning (default : 4146)


 

 

OK,到这里就可以开始使用VC对WORD进行操作了,一些具体的操作,留着后面再说吧~

原创粉丝点击