用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~
OK,到这里就可以开始使用VC对WORD进行操作了,一些具体的操作,留着后面再说吧~
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进行操作了,一些具体的操作,留着后面再说吧~
相关文章推荐
- vc操作word的简单例子
- VC操作Word之(二)
- 综述:本专栏将介绍以下内容(专栏:Java代码操作word、excel、pdf等文件)
- VC操作Word系列(一)
- VC操作word实例详解
- vc操作word读写
- VC操作Word之(二)
- VC++利用Automation操作word, excel
- VC操作Word系列(二)
- VC++操作Word之简明入门教程
- VC操作Word之(一)
- 用VC操作WORD
- VC操作Word系列(三)
- (非常好的Word操作封装类)VC中进行office编程的-操作word,可以设置文字的样式,新建表格
- VC++ 操作 word
- VC操作Word之(三)
- vc++操作word
- VC操作word
- VC操作Word系列(四)
- VC 操作Word, Excel 出现"服务器正在运行中" Ole Server Busy对话框的原因分析和解决建议