ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:21.65KB ,
资源ID:10032342      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10032342.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MS Office中的COM应用.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

MS Office中的COM应用.docx

1、MS Office中的COM应用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

2、的所有图表、打印和数据分析工具等。该技术的特点大大简化了开发过程,加快了开发的进度。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

3、 和 COleException 之类的其他 MFC类可简化自动化任务,操作更加简单,所以建议采用该方法。2)通过#import指令引入Office类型库,创建智能指针的方式智能指针的功能非常强大,但不建议使用它,因为它与 Microsoft Office 应用程序一起使用时,经常会出现引用计数问题。3)利用C+直接调用COM服务C+相比上面两种方式实现起来比较困难,但是有时为了避免采用MFC造成的资源开销过大或避免使用#import方式所带来的问题,通常采用此种方式。类型库与C/C+头文件类似,它包含服务器发布的接口、方法和属性。Visual C+附带的OLE/COM对象查看器(Olevie

4、w.exe)用来查看类型库。表12-1列出了Microsoft Office 95、Microsoft Office 97、Microsoft Office 2000、Microsoft Office 2002和Microsoft Office 2003的类型库文件名。表12-1 Office类型库 Office版本和类型类型库文件Office版本和类型类型库文件Access 97Msacc8.olbPowerPoint 2000Msppt9.olbJet Database3.5 DAO350.dllWord 2000Msword9.olbBinder 97Msbdr8.olbAccess 2

5、002Msacc.olbExcel 97Excel8.olbExcel 2002Excel.exeGraph 97Graph8.olbGraph 2002Graph.exeOffice 97Mso97.dllOffice 2002MSO.dllOutlook 97Msoutl97.olbOutlook 2002MSOutl.olbPowerPoint 97Msppt8.olbPowerPoint 2002MSPpt.olbWord 97Msword8.olbWord 2002MSWord.olbAccess 2000Msacc9.olbOffice Access 2003Msacc.olbJe

6、t Database 3.51DAO360.dllOffice Excel 2003Excel.exeBinder 2000Msbdr9.olbGraph 2003Graph.exeExcel 2000Excel9.olbOffice 2003MSO.dllGraph 2000Graph9.olbOffice Outlook 2003MSOutl.olbOffice 2000Mso9.dllOffice PowerPoint 2003MSPpt.olbOutlook 2000Msoutl9.olbOffice Word 2003MSWord.olbMFC引入类型库的一般步骤如下。(1)启动MF

7、C的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声

8、名一个类对象,通过CreateDispatch实例化该对象,代码参考如下:_Application wordApp;wordApp.CreateDispatch(_T(Word.Applcation);实例化对象后,应用程序就启动了应用程序,通过对象实例wordApp可以获得Word版本属性、修改Word标题等,可以参考_Application 方法和属性。3实例代码本实例演示了利用VC+创建的应用程序打开Word,并且获取Word的版本号,关闭Word文档。(1)创建一个基于对话框的工程AutoMation,在窗口上放置一个进度条和两个按钮,用于启动和关闭Word。启动VC+的ClassWi

9、zard,添加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:OnOp

10、enBtn() 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.Set

11、Caption(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=

12、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 CAutoMationD

13、lg: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+启动Word12.2.2 VC+读/写Word文档1问题阐述在第7章阐述了读/写文本文件、ini 文件、.inf等非复合文档文件,这些文件系统给出了相应的API函数完成了文件的读写,对Word的读取/写入系统没有提供API函数,VC+

14、如何完成Word的读写呢?2实现技巧 写Word文档,首先要从Word应用程序获取文档的类的对象,然后设置文档中接收文字位置,最后将文字写入Word文档。在上一节加入_Application应用程序类,本节继续加入两个类,即Document类和Selection类,按照以前添加类的步骤,将Documents类和Selection类添加进应用程序。Documents类是文档对象集类,是所有Document对象的集合。使用Documents对象集合的Add方法可以新建一篇空白文档并将返回的Document 对象添至Documents对象集合之中。Add方法的原型声明如下:LPDISPATCH Ad

15、d(VARIANT* Template, VARIANT* NewTemplate, VARIANT* DocumentType, VARIANT* Visible)l 参数Template,指定新文档使用的模板名,如果忽略此参数则使用Normal模板。l 参数NewTemplate,如果此属性设置为 True 则将文档作为模板打开。默认值为 False。l 参数DocumentType其值可取下列 WdNewDocumentType常量之一。 WdNewBlankDocument 创建一个空白文档,默认值。 WdNewEmailMessage 新建一个电子邮件信息。 wdNewWebPage

16、 新建一个Web页。l 参数Visible,如果此参数为True,Microsoft Word将在可见窗口打开文档。如果此参数为False,Word仍会打开此文档但文档窗口的Visible属性变为False,默认值为True。Selection类对象用于选定文档的文字,然后对选定部分进行操作,如设置文字的格式或键入文字。Selection 对象代表窗体中的选定内容,每个窗体中只能有一个Selection 对象而且只能激活一个 Selection 对象。Selection 对象代表的选定内容既可以是文档中的一个区域也可以仅仅是一个插入点。通过Selection对象的TypeText和GetTex

17、t可对Word文档进行读写操作。TypeText的函数作用为写Word文档,其函数的声明如下:void TypeText(LPCTSTR Text);GetText的函数的作用是读文档,其函数的声明如下:CString GetText();3实例代码本实例演示了如何读写Word文档。创建一个基于对话框的工程ReadWriteWord。通过上面的方法引入类型库,增加_Application类、Documents类、Selection类。在对话框上添加两个文本控件,两个按钮。文本控件分别用于输入和接收文本。在CreadWriteWord中的InitInstance初始化COM库添加代码如下:HRE

18、SULT hr;hr = AfxOleInit( );if(FAILED(hr) AfxMessageBox(初始化COM失败); return FALSE;在ReadWriteWordDlg.h中包含头文件:#include msword.h#include atlbase.h在stdafx.h中声明自定义消息标识:#define WM_SEND WM_USER+1声明3个_Application、Documents、Selection的对象,参考代码如下:/Attribute _Application m_App; /Word应用程序对象 Documents m_Doc; /Word文档对

19、象 Selection m_Slection; /文档选择对象声明一个CEdit类的派生类CMyEdit,在 CMyEdit中响应WM_CHAR消息,代码如下:void CMyEdit:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) GetParent()-PostMessage(WM_SEND,(WPARAM)nChar,0); /向父窗口发送字符。 CEdit:OnChar(nChar, nRepCnt, nFlags);在ReadWriteWordDlgl类的OnInitDialog函数中实例化Word应用程序,新建Word文档,参考代码如下:

20、BOOL CReadWriteWordDlg:OnInitDialog( )/*try if(!m_App.CreateDispatch(_T(Word.Application) /启动Word AfxMessageBox(_T(请检查是否安装了Office); return FALSE; m_App.SetVisible(true); m_Doc = m_App.GetDocuments(); CComVariant Template(_T(); CComVariant NewTemplate(false),DocumentType(0),Visible; m_Doc.Add(&Templa

21、te,&NewTemplate,&DocumentType,&Visible); catch(_com_error &e) MessageBox(e.ErrorMessage(); /*return TRUE;在ReadWriteWordDlg类中定义WM_SEND的消息体,在ReadWriteWordDlg.h中添加消息函数声明,在ReadWriteWordDlg.cpp中函数的实现参考代码如下:/*/* 消息体函数/*/void CReadWriteWordDlg:SendMsgToWord(WPARAM wParam,LPARAM lParam) CString strTmp = ; U

22、INT nChar = wParam; strTmp.Format(%c,wParam); m_Slection=m_App.GetSelection(); m_Slection.TypeText(strTmp);写Word按钮的响应参考代码如下:void CReadWriteWordDlg:OnWriteBtn() m_Slection=m_App.GetSelection();/Word文档光标输入点读Word按钮的响应参考代码如下:/*/* 读Word /*/void CReadWriteWordDlg:OnReadBtn() m_Slection.GetSections(); /获取光

23、标点 m_Slection.WholeStory(); /对当前文档全选 SetDlgItemText(IDC_READ_ED,m_Slection.GetText();释放对象的参考代码如下:/*/* 最后释放声明的对象/*/void CReadWriteWordDlg:OnDestroy() CDialog:OnDestroy(); m_Slection.ReleaseDispatch(); /释放selection对象 m_Doc.ReleaseDispatch(); /释放Document对象 CComVariant SaveChanges(false),OriginalFormat,

24、RouteDocument; m_App.Quit(&SaveChanges,&OriginalFormat,&RouteDocument); m_App.ReleaseDispatch(); /释放应用程序类对象。程序的运行效果如图12-24所示。利用MSWORD.OLB实现多种格式(DOC、rtf、HTML、XML.)转换成TXT利用MSWORD.OLB实现多种格式(DOC、rtf、HTML、XML.)转换成TXT 首先加载MSWORD.OLB:classwizard-automation-add class-from a type library,选择program files/micr

25、osoft office/office11(用的是office 2003)下的MSWORD.OLB,确定后,在工程中生成msword.ht msword.cpp两个文件。代码部分: / doc、html、xml转Txt, _Application oWord ; Documents oDocs; _Document oDoc; COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR); /For optional args /Start Word if(!(oWord.CreateDispatch(Word.Application, NULL) AfxMessa

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2