在一个MFC工程中调用Word ActiveX自动化

http://www.5xsoft.com/Article.aspx?id=241

近一周在实际复旦OA的一个辅助公文流转的ActiveX控件,发现了一些新的东西。
  1.在一个MFC工程中调用Word ActiveX自动化。
  用ClassWizard中通过添加类From TypeLib来自动添加调用的接口类,TypeLib是office安装目录里的以OLB为扩展名的文件,Office2k的为MSWORD9.OLB,Office2k3的为MSWORD.OLB,选中你要使用的类就可以生成了,当然也可以把所有的类都选中,如果你不闲看着一堆无用的东西烦的话。
  一般的过程:
打开WORD
CoInitialize(NULL); //初始化OLE环境 if(!wordapp.CreateDispatch(_T("Word.Application"))) //创建WORD分派,启动WORD进程 { AfxMessageBox(_T("请先安装Word后再处理OA公文")); return 1; } CComVariant CovOptional=CComVariant(""); try{ wordapp.SetVisible(false); //将WORD窗口设为用户不可见 docs.AttachDispatch(wordapp.GetDocuments()); //获取docs接口 CComVariant FileName=CComVariant((LPCSTR)m_localFilePath); CComVariant CovFalse=CComVariant(false); CComVariant CovTrue=CComVariant(true); doc=docs.Open(&FileName,&CovFalse,&CovFalse,&CovFalse,&CovOptional,&CovOptional,&CovFalse,&CovOptional, &CovOptional,&CovTrue,&CovTrue,&CovTrue); //打开文档并获取新文档的接口 doc.Activate(); //激活文档 }catch(CException *ex) { ex->ReportError(); ex->Delete(); return 7; }

 

其中的定义

Application wordapp=NULL; Documents docs=NULL; _Document doc=NULL;

设置修订

Options ops=NULL; CComVariant CovOptional; try{ ops=wordapp.GetOptions();//获取Options接口 if (m_revisionOption!=2) { ops.SetInsertedTextColor(-1); //设置插入修订颜色按作者不同 ops.SetInsertedTextMark(3); ops.SetDeletedTextColor(-1); //设置删除 ops.SetDeletedTextMark(1); } wordapp.SetUserName((LPCTSTR)m_username); //设置操作者用户名 if(m_revisionOption==0) { doc.SetPrintRevisions(true); //设置打印修订 doc.SetShowRevisions(true); //设置显示修订 }else { doc.SetPrintRevisions(false); doc.SetShowRevisions(false); } if(m_revisionOption==2) { doc.SetTrackRevisions(false); //设置记录修订 }else { doc.SetTrackRevisions(true); } }catch(CException *ex) { ex->ReportError(); ex->Delete(); } if(ops!=NULL) ops.ReleaseDispatch(); return 0;

 

操作书签

Bookmarks bms=NULL; Bookmark bm=NULL; Range range=NULL; try{ doc.SetTrackRevisions(false); bms=doc.GetBookmarks(); //获取Bookmarks接口 bm=bms.Item(&CComVariant(lpszName)); //按书签名获取Bookmark接口 range=bm.GetRange(); //获取书签的操作范围接口 range.SetText(lpszText); //设置书签的文本 }catch(CException *ex) { ex->ReportError(); ex->Delete(); } if(range!=NULL) range.ReleaseDispatch(); if(bm!=NULL) bm.ReleaseDispatch(); if(bms!=NULL) bms.ReleaseDispatch(); return 0;

 

关闭Word并保存

CComVariant SaveChanges=CComVariant(true); CComVariant CovOptional; wordapp.Quit(&SaveChanges,&CovOptional,&CovOptional); //退出并保存 if(doc!=NULL) doc.ReleaseDispatch(); if(docs!=NULL) docs.ReleaseDispatch(); wordapp.ReleaseDispatch(); wordapp=NULL; CoUninitialize(); //关闭OLE环境

以上是我用到的一些东西,其实Word ActiveX非常功能强大,WORD就是它,它就是WORD,它里面有无数的东西,这些东西你可以从WORD的宏编辑器里,有一个对象浏览器,你可以看到,或者是用ActiveX TypeLib的查看器来查看它的Typelib。至于那些方面的参数里的VARIANT型的参数,你可通过Office的帮助或者录制宏然后再用宏编辑器查看到。

你可能感兴趣的:(ms,word)