频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

12.2.1 VC++实现Office自动化

作者: 郭克新编著 出处:电子工业出版社  2008-06-13 11:55    砖    好    评论   进入论坛
阅读提示:《Visual C++代码参考与技巧大全》第12章主要讲的是COM组件技术操作技巧,COM是开发组件的一种方法,组件是一些小的二进制程序,它可以为操作系统或者应用程序提供服务。COM技术的发展进一步加强了程序的模块化编程的思想,使应用程序在更容易扩展与升级,具有更好的灵活性和动态性,COM支持了分部使应用程序的开发,本节为大家介绍VC++实现Office自动化。

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
(2)在Office的目录中找到适合版本的类型库,如图12-20所示。
 
图12-20  添加类型库向导2
(3)选择类型文件后,根据所实现的功能选择不同的类,当然,也可以全部选择,如图12-21所示。
 
图12-21  添加类型库向导3
(4)单击【OK】按钮,将所选择的类_Application添加到创建应用程序中,如图12-22所示。
 
图12-22  添加类型库向导4
在MS Word中,_Application的一个对象代表是Word应用程序本身,在VC++中通过自动化技术控制Word时,则可用_Application声名一个类对象,通过CreateDispatch实例化该对象,代码参考如下:
 _Application  wordApp;
wordApp.CreateDispatch(_T(Word.Applcation));

实例化对象后,应用程序就启动了应用程序,通过对象实例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();
if(FAILED(hr))
{
AfxMessageBox("初始化COM失败!!");
}

(3)为了处理VARIANT类型方便,在stdafx.h中包含头文件atlbase.h。

(4)添加按钮的处理消息和定时器处理代码。

打开按钮的响应代码:

void CAutoMationDlg::OnOpenBtn() 
{
if(!m_App.CreateDispatch(CLSID_Application))  //可以采用CLSID启动
{
 AfxMessageBox(_T("请检查是否安装了Office"));
return;
}
if(!m_App.CreateDispatch(_T("Word.Application"))) //启动Word
{
 AfxMessageBox(_T("请检查是否安装了Office"));
return;
}
else
{
SetTimer(1,500,NULL);
 MessageBox("Word启动");
 MessageBox(m_App.GetVersion());    //获取Word版本
m_App.SetCaption("this is a test");     //设置Word的标题
m_nCurStep = 0;
m_ProgressCtrl.SetStep(10);
m_ProgressCtrl.SetRange(0,40);
m_App.SetVisible(TRUE);

}
关闭按钮的响应代码:
/************************************************************************/
/* 关闭Word
/************************************************************************/
void CAutoMationDlg::OnCloseBtn()
{
//定义调用QUIT时使用的参数
VARIANT VarIsSave,VarInit,VarRoute; 
//退出Word时候的不保存参数
VarIsSave.vt=VT_BOOL; 
VarIsSave.boolVal=VARIANT_FALSE;

//初始化VARIANT变量
::VariantInit(&VarInit);  
::VariantInit(&VarRoute);     
//VarRoute.vt=VT_EMPTY;
//VarInit.vt = VT_EMPTY;
    //调用Quit,退出Word应用程序
m_App.Quit(&VarIsSave,&VarInit,&VarRoute);
MessageBox("退出Word编辑!");
m_ProgressCtrl.SetPos(0);
//释放对象指针
m_App.ReleaseDispatch();  //一定要释放
}
定时器处理代码:
void CAutoMationDlg::OnTimer(UINT nIDEvent) 
{
m_nCurStep+=10;
m_ProgressCtrl.SetPos(m_nCurStep);
int n = m_ProgressCtrl.GetPos();
if(n > 40)
{
KillTimer(1);
}
CDialog::OnTimer(nIDEvent);
}
运行效果如图12-23所示。
 
图12-23  VC++启动Word
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
专题
贝恩资本携手华为22亿美元收购3Com案
Visual C++代码参考与技巧大全
开发者突击:JSP网络开发经典模块实现全集
Oracle 11g权威指南
Flash CS3网站建设实例详解
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
中国互联网大会2008
中国互联网大会2008
微软出价446亿美元收购雅虎
微软出价446亿美元收购雅虎
技术人求职简历完备手册
技术人求职简历完备手册
· 技术人求职简历完备手册
· 访问控制列表(ACL)介绍
· 隐私保护技术探讨
· Windows Server 2008专..
· 华为员工自杀频频拷问..
· 勇闯IT培训黑色围城
· CISSP认证成长之路
· 解析35岁技术人的价值..
· 网络工程师职业规划与..
· LAMP技术精解
· AMD Phenom三核处理器..
· 充电计划之热门IT认证..
· 如何有效防御SQL注入攻..
· 2008年上半年全国软考..
· 选择适合自己的IT认证
· IPv6协议--拓展网络无..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
iSCSI应用与发展
iSCSI应用与发展
SQL Server 2008/2005全解
SQL Server 2008/2005全解
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· 打造安全服务器
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· 了解统一威胁管理(UTM)..
· 专题:AIX操作系统管理..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· iSCSI应用与发展
· 三层交换技术专题
· Apache技术专题
· 企业数据恢复指南
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用
· 访问控制列表(ACL)介绍
· PHP开发应用手册
· 专题:AIX操作系统管理..