设为首页 加入收藏

TOP

用Visual C++操纵MS Word(二)
2012-11-04 15:12:02 来源: 作者: 【 】 浏览:389
Tags:Visual 操纵 Word
  三、基本步骤

  (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 97Msacc8.olbPowerPoint 2000Msppt9.olb
Jet Database 3.5DAO350.dllWord 2000Msword9.olb
Binder 97Msbdr8.olbAccess 2002Msacc.olb
Excel 97Excel8.olbExcel 2002Excel.exe
Graph 97Graph8.olbGraph 2002Graph.exe
Office 97 Mso97.dllOffice 2002MSO.dll
Outlook 97Msoutl97.olbOutlook 2002MSOutl.olb
PowerPoint 97Msppt8.olb PowerPoint 2002MSPpt.olb
Word 97Msword8.olbWord 2002MSWord.olb
Access 2000Msacc9.olbOffice Access 2003 Msacc.olb
Jet Database 3.51DAO360.dllOffice Excel 2003Excel.exe
Binder 2000Msbdr9.olb Graph 2003Graph.exe
Excel 2000Excel9.olb Office 2003MSO.dll
Graph 2000Graph9.olbOffice Outlook 2003MSOutl.olb
Office 2000Mso9.dllOffice PowerPoint 2003MSPpt.olb
Outlook 2000Msoutl9.olbOffice Word 2003MSWord.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 啦。

  源代码下载
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇分析与理解VC的通知消息WM_NOTIFY 下一篇用DirectShow设计媒体播放器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: