12.2 MS Office 中的COM应用
MS Office中的COM是应用最广泛的自动化技术,该功能所描述的是利用Visual C++应用程序控制Microsoft Office组件。自动化(OLE自动化)技术允许将现有的程序的功能合并到VC++的应用程序中。自动化技术建立在组件对象模型(COM)的基础上,系统的COM随操作系统一起安装的动态链接库(DLL)提供一组服务。例如,应用程序中使用Microsoft Word的拼写和语法检查功能,而不让用户看到Microsoft Word:可以使用Office的OCR技术,自动化也可以使用Microsoft Excel的所有图表、打印和数据分析工具等。该技术的特点大大简化了开发过程,加快了开发的进度。
12.2.1 VC++实现Office自动化
1.问题阐述
熟悉VBA的开发者对于这一操作都非常熟悉,在VC++中读取MS Word系统并没有显示的这一功能,但是在Microsoft 的 Office 产品中,都提供了OLE Automation 自动化程序的接口,在VC++中如何实现Office的自动化技术呢?
2.实现技巧
VC++实现Office自动化,通常可以采取以下3种方式实现。
1)利用Visual C++的类向导机制,从Office类型库生成包装类
生成的这些类,以及诸如 COleVariant、COleSafeArray 和 COleException 之类的其他 MFC类可简化自动化任务,操作更加简单,所以建议采用该方法。
2)通过#import指令引入Office类型库,创建智能指针的方式
智能指针的功能非常强大,但不建议使用它,因为它与 Microsoft Office 应用程序一起使用时,经常会出现引用计数问题。
3)利用C++直接调用COM服务
C++相比上面两种方式实现起来比较困难,但是有时为了避免采用MFC造成的资源开销过大或避免使用#import方式所带来的问题,通常采用此种方式。
类型库与C/C++头文件类似,它包含服务器发布的接口、方法和属性。Visual C++附带的OLE/COM对象查看器(Oleview.exe)用来查看类型库。表12-1列出了Microsoft Office 95、Microsoft Office 97、Microsoft Office 2000、Microsoft Office 2002和Microsoft Office 2003的类型库文件名。
表12-1 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 |
MFC引入类型库的一般步骤如下。
(1)启动MFC的ClassWizard,出现如图12-19所示的对话框。
|
| (点击查看大图)图12-19 添加类型库向导1 |
|
| 图12-20 添加类型库向导2 |
|
| 图12-21 添加类型库向导3 |
|
| 图12-22 添加类型库向导4 |
_Application wordApp; |
实例化对象后,应用程序就启动了应用程序,通过对象实例wordApp可以获得Word版本属性、修改Word标题等,可以参考_Application 方法和属性。
3.实例代码
本实例演示了利用VC++创建的应用程序打开Word,并且获取Word的版本号,关闭Word文档。
(1)创建一个基于对话框的工程AutoMation,在窗口上放置一个进度条和两个按钮,用于启动和关闭Word。启动VC++的ClassWizard,添加MS Word的类型库(MSWord.olb),选择要生成的类_Application。添加后,在源文件文件夹中增加了msword.h和msword.cpp两个文件。
(2)在CAutoMationApp的InitInstance中添加初始化COM的代码:
HRESULT hr = AfxOleInit(); |
(3)为了处理VARIANT类型方便,在stdafx.h中包含头文件atlbase.h。
(4)添加按钮的处理消息和定时器处理代码。
打开按钮的响应代码:
void CAutoMationDlg::OnOpenBtn() |
/************************************************************************/ //调用Quit,退出Word应用程序 |
void CAutoMationDlg::OnTimer(UINT nIDEvent) |
|
| 图12-23 VC++启动Word |
| 回书目 上一节 下一节 |
|
· 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. · 08年5月各大网上书店及.. · 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. |
· 网络工程师自测获奖名.. · 08年4月各大网上书店及.. · 系统分析师自测获奖名.. · Linux结课考试自测获奖.. · 上周Linux系统命令的使.. · 上周真题冲刺测试获奖.. |
|
||||
| · 技术人求职简历完备手册 · 访问控制列表(ACL)介绍 · 隐私保护技术探讨 · Windows Server 2008专.. · 华为员工自杀频频拷问.. · 勇闯IT培训黑色围城 · CISSP认证成长之路 · 解析35岁技术人的价值.. |
· 网络工程师职业规划与.. · LAMP技术精解 · AMD Phenom三核处理器.. · 充电计划之热门IT认证.. · 如何有效防御SQL注入攻.. · 2008年上半年全国软考.. · 选择适合自己的IT认证 · IPv6协议--拓展网络无.. |
|||
|
||||
| · SQL Server 2008/2005.. · SOA 面向服务架构 · SQL Server 2008/2005.. · iSCSI应用与发展 · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 |
· 国际文档格式标准开战 · 路由器设置与口令恢复 · 打造安全服务器 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. |
|||
|
||||
| · iSCSI应用与发展 · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · iSCSI应用与发展 · 三层交换技术专题 · Apache技术专题 |
· 企业数据恢复指南 · 路由器设置与口令恢复 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · PHP开发应用手册 · 专题:AIX操作系统管理.. |
|||