王朝网络
分享
 
 
 

Visual C++ 中操纵 MS Word 123

王朝vc·作者佚名  2006-01-17
宽屏版  字体: |||超大  

Visual C++ 中操纵 MS Word 123

作者:杨老师

源代码下载

使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序......只要是Office能够实现的功能,都可以在你写的程序中调用。仔细阅读下面的说明,并下载源文件进行参考,你就可以一步一步地掌握这个技术。祝朋友们学习快乐。

一、概念

Microsoft 的 Office 产品中,都提供了OLE

Automation 自动化程序的接口。如果你使用VB,VBA 和 Script

脚本调用 Office 功能的话,其实比使用 VC

调用要简单的多。比如在 WORD 中,调出菜单“工具(T)\宏(M)\录制新宏(R)”,这时候它开始记录你在

WORD

中任何菜单和键盘的操作,把你的操作过程保存起来,以便再次重复调用。而保存这些操作的记录,其实就是使用了

VBA 程序(Visual Basic for Application)。而我们下面要实现的功能,也同样要参考

VBA 的方法。

二、结构层次

为了更有逻辑,更有层次地操作 Office,Microsoft

把应用(Application)按逻辑功能划分为如下的树形结构

Application(WORD 为例,只列出一部分)

Documents(所有的文档)

Document(一个文档)

......

Templates(所有模板)

Template(一个模板)

......

Windows(所有窗口)

Window

Selection

View

Selection(编辑对象)

Font

Style

Range

......

......

只有了解了逻辑层次,我们才能正确的操纵 Office。举例来讲,如果给出一个VBScript语句是:

application.ActiveDocument.SaveAs "c:\abc.doc"

那么,我们就知道了,这个操作的过程是:第一步,取得Application;第二步,从Application中取得ActiveDocument;第三步,调用

Document 的函数 SaveAs,参数是一个字符串型的文件名。

三、基本步骤

(1)创建(或打开已有的)一个 MFC 的程序工程

(2)Ctrl+W 执行 ClassWizard(本文按照 VC6

操作,例子程序也是在VC6 下编写测试的)

(3)Add Class...\From a type Library... 在 Office

目录中,找到你想使用的类型库。(我使用的是 Office2000,其Word

的类型库文件,保存在 C:\Program Files\Microsoft

Office\Office\MSWORD9.OLB)根据你 Office

的版本,可以使用下表列出的类型库文件

Office 版本和类型

类型库文件

Office 版本和类型

类型库文件

Access 97

Msacc8.olb

PowerPoint 2000

Msppt9.olb

Jet Database

3.5 DAO350.dll

Word 2000

Msword9.olb

Binder 97

Msbdr8.olb

Access 2002

Msacc.olb

Excel 97

Excel8.olb

Excel 2002

Excel.exe

Graph 97

Graph8.olb

Graph 2002

Graph.exe

Office 97

Mso97.dll

Office 2002

MSO.dll

Outlook 97

Msoutl97.olb

Outlook 2002

MSOutl.olb

PowerPoint 97

Msppt8.olb

PowerPoint 2002

MSPpt.olb

Word 97

Msword8.olb

Word 2002

MSWord.olb

Access 2000

Msacc9.olb

Office Access 2003

Msacc.olb

Jet Database 3.51

DAO360.dll

Office Excel 2003

Excel.exe

Binder 2000

Msbdr9.olb

Graph 2003

Graph.exe

Excel 2000

Excel9.olb

Office 2003

MSO.dll

Graph 2000

Graph9.olb

Office Outlook 2003

MSOutl.olb

Office 2000

Mso9.dll

Office PowerPoint 2003

MSPpt.olb

Outlook 2000

Msoutl9.olb

Office Word 2003

MSWord.olb

(4)选择类型库文件后,在弹出的对话窗中继续选择要添加的类。具体选择什么类,要看你将来在程序中打算调用什么功能。当然,你也可以不用考虑这么多,用鼠标和Shift键配合,全部选择也可以。

(5)初始化COM。方法一,找到App的InitInstance()函数,在其中添加

AfxOleInit()函数的调用;方法二,在需要调用COM功能的地方

CoInitialize(NULL),调用完毕后 CoUninitialize()。

(6)在你需要调用 Office 功能函数的 cpp 文件中

#include <atlbase.h> //

为了方便操作 VARIANT 类型变量,使用 CComVariant 模板类

#include "头文件.h" //

具体的头文件名,是由装载类型库的文件名决定的。(鼠标双点包装类的文件,就可以看到)

// 比如使用 msword9.olb类型库,那么头文件是 msword9.h

(7)好了,现在开始写程序吧。另外要说明的是,步骤3和4,其实也可以使用

#import 方式引入类型库。

四、实现技巧

在书写调用 Office

函数的过程中,最困难的是确定函数的参数,一般情况下,参数都是

VARIANT

类型的变量指针。那么到底具体我们应该怎么写那?推荐两个方法,其一是阅读有关

VBA 的书籍;其二,是使用 Office 中自带的“宏”功能。强烈推荐大家使用第二个方法,把你要完成的功能,在

Office

的操作环境中,用宏录制下来,然后观察分析录制后的函数和参数,就可以在

VC 中使用了。举一个例子:

ActiveDocument.SaveAs FileName:="Hello.doc", FileFormat:=wdFormatDocument _

, LockComments:=False, Password:="", AddToRecentFiles:=True, _

WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _

SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _

False

以上是在 Word 中录制的一个保存文件的宏,而在 VC

中对应的函数原型为

void _Document::SaveAs(VARIANT* FileName, VARIANT* FileFormat, VARIANT* LockComments,

VARIANT* Password, VARIANT* AddToRecentFiles, VARIANT* WritePassword,

VARIANT* ReadOnlyRecommended, VARIANT* EmbedTrueTypeFonts, VARIANT* SaveNativePictureFormat,

VARIANT* SaveFormsData, VARIANT* SaveAsAOCELetter)

分析对照后,我们就能看出,参数 FileName 是字符串

VARIANT(VT_BSTR),参数 LockComments 是布尔VARIANT(VT_BOOL),等等。参数

FileFormat := wdFormatDocument

是什么类型那?其实这是一个表示保存的时候指定文件类型的常量,而且显然是

DWORD 类型VARIANT(VT_I4)。那么常量的数值又是多少那?很简单,写一个宏,调用函数

MsgBox 显示一下不就都知道啦?!

五、步步为营

特别提示一:编译执行前,一定要先关闭

KV 实时监视病毒的功能(KV

的程序会干扰我们的调用,瑞星的则没关系)。

特别提示二:在例子程序中,为了表现程序的关键部分,没有或很少使用了条件判断。为了实现你程序的健壮性,请自己加上条件判断和异常处理。

Step1:如何启动和关闭 WORD,及 VARIANT

的最基本的使用方法

Step2:和 Step1 同样功能,用 CComVariant 改进了 VARIANT

的使用方式

Step3:在 Step2 的基础上,新建一个 WORD

文档,并从程序中传送一些字符到 WORD

Step4:在 Step3 的基础上,保存 WORD 文档

Step5:一个小应用举例,把输入的汉字按照“笔画”排序

Step6:一个小应用举例,盗窃正在使用的 WORD 文档

以上这6个小程序中,都有详细的注释。大家阅读后慢慢体会并实验,你就可以自由地操纵任何一个

Office 啦。

六、参考:Microsoft Office Development with Visual Studio

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有