三、基本步骤
(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 啦。
源代码下载
|