您的位置:首页 > 编程语言 > C语言/C++

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

2012-10-13 17:53 190 查看
写在前面:

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进行操作了,一些具体的操作,留着后面再说吧~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: