博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在VC中调用WORD(显示,修改,存盘,运行宏) (转)
阅读量:2505 次
发布时间:2019-05-11

本文共 3048 字,大约阅读时间需要 10 分钟。

在VC中调用WORD(显示,修改,存盘,运行宏) (转)[@more@]

(1)使用AppWizard创建一个新的MFC AppWizard(EXE)工程,命名为"" 

(2)选择单文档视图(SDI)结构,在第3步中需要选中Container,以提供容器支持,并且选中active document container 其它都为默认

(3)在View菜单中,选ClassWizard,选Automation选项卡,选Add Class,选择From a TypeLibrary, 在Office目录中选中 97/2000 类型库Word8.olb或Word9.olb,选中application,document,_document。单击ok

(4)给COfficeCntrItem添加一方法。GetIDispatch()

其源码如下:

 ASSERT_VALID(this);  

 ASSERT(m_lp != NULL);  
 LPUNKNOWN lpUnk = m_lpObject; 
 Run();  
 LPOLELINK lpOleLink = NULL;  
 if (m_lpObject->QueryInterface(IID_IOleLink, (LPVOID FAR*)&lpOleLink) == NOERROR)  
 {  
 ASSERT(lpOleLink != NULL);  
 lpUnk = NULL;  
 if (lpOleLink->GetBound(&lpUnk) != NOERROR)  
 {  
 TRACE0("Warning: Link is not connected!n");  
 lpOleLink->Release();  
 return NULL;  
 }  
 ASSERT(lpUnk != NULL);  
 }  
 LPDISPATCH lpDispatch = NULL;  
 if (lpUnk->QueryInterface(IID_IDispatch, (LPVOID FAR*)&lpDispatch)!=NOERROR)  
 {
 TRACE0("Warning: does not support IDispatch!n");  
 return NULL;
 
 }
 ASSERT(lpDispatch != NULL);  
 return lpDispatch;
(5)。在officeView.h添加#include "msword8.h"

(6)。修改void COfficeView::OnInsertObject(),源码如下:

 BeginWaitCursor();

 COfficeCntrItem* pItem = NULL;

 TRY
 {
 // Create new item connected to this document.
 COfficeDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 pItem = new COfficeCntrItem(pDoc);
 ASSERT_VALID(pItem);

 // Initialize the item from the dialog data.

 /* if (!dlg.CreateItem(pItem))
 AfxThrowMemoryException();  // any exception will do
 ASSERT_VALID(pItem);*/
 CLSID clsid; //
 if(FAILED(::CLSIDFromProgID(L"Word.document",&clsid)))
 AfxThrowMemoryException();
 
 if(!pItem->CreateNewItem(clsid)) 
 /*(!pItem->CreateFromFile (filename,clsid)) */
 AfxThrowMemoryException();
 ASSERT_VALID(pItem);
 
 pItem->Activate (OLEIVERB_SHOW,this);
 
 

 ASSERT_VALID(pItem);

   m_pion = pItem;  // set selection to last inserted item
 pDoc->UpdateAllViews(NULL);
 // As an arbitrary user interface design, this sets the selection
 //  to the last item inserted.

 // TODO: reimplement selection as appropriate for your application

 m_pSelection = pItem;  // set selection to last inserted item

 pDoc->UpdateAllViews(NULL);
 }
 CATCH(CException, e)
 {
 if (pItem != NULL)
 {
 ASSERT_VALID(pItem);
 pItem->Delete();
 }
 AfxMessageBox(IDP_FAILED_TO_CREATE);
 }
 END_CATCH

 EndWaitCursor();

(7)重载ID—FILE—SAVE,

void COfficeView::OnFileSave()

{
 // TODO: Add your command handler code here
 TRY{
   LPDISPATCH lpDisp;
 
 lpDisp = m_pSelection->GetIDispatch();

  Documents docs;

 
 _Application app;
 
 _Document mydoc;
 Documents my;

 mydoc.AttachDispatch (lpDisp,TRUE);

 app=mydoc.GetApplication ();
 /*  ("Macro3");*/
  mydoc.Activate ();
 BOOL password=mydoc.GetHassword ();
 mydoc.SetPassword ("love");
 password=mydoc.GetHasPassword (); 
 COleVariant vFalse((short)FALSE);
 mydoc.SaveAs (COleVariant("c:love.doc"),vFalse,vFalse, COleVariant(""),vFalse,
 COleVariant(""),vFalse,vFalse,vFalse,vFalse,vFalse);
 
 }
 CATCH(CException, e)
 {
  }
 END_CATCH
}
bulid,click insert object,and edit ,and save.maybe run macro.

自己辛苦了很久加上别人的总算做出来。:)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-985331/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-985331/

你可能感兴趣的文章
可视化对象(str/repr/bytes)
查看>>
LeetCode 120. 三角形最小路径和
查看>>
剑指offer-机器人的运动范围
查看>>
Web APi之过滤器创建过程原理解析【一】(十)
查看>>
scala(06)----(AKKA)
查看>>
iOS App 启动性能优化
查看>>
Asp.Net MVC3 简单入门详解过滤器Filter
查看>>
IntelliJ IDEA(一) :安装
查看>>
Java中String与BufferedReader、InputStream转换
查看>>
netty使用MessageToByteEncoder 自定义协议(四)
查看>>
MySQL 安装
查看>>
吴裕雄--天生自然 python数据分析:葡萄酒分析
查看>>
吴裕雄 Bootstrap 前端框架开发——简介
查看>>
判断一个对象是jQuery对象还是DOM对象
查看>>
设计简单的后台管理的数据排序
查看>>
whust#2 I Hou Yi's secret
查看>>
JAVA并发---记录2
查看>>
学历很重要
查看>>
【POJ2778】AC自动机+矩阵乘法
查看>>
自定义粘贴板-陈鹏
查看>>