在VC中调用WORD(显示,修改,存盘,运行宏)
2001-09-14 17:06
441 查看
(1)使用AppWizard创建一个新的MFC AppWizard(EXE)工程,命名为"office"
(2)选择单文档视图(SDI)结构,在第3步中需要选中Container,以提供容器支持,并且选中active document container 其它都为默认
(3)在View菜单中,选ClassWizard,选Automation选项卡,选Add Class,选择From a TypeLibrary, 在Office目录中选中Microsoft Word 97/2000 类型库Word8.olb或Word9.olb,选中application,document,_document。单击ok
(4)给COfficeCntrItem添加一方法。GetIDispatch()
其源码如下:
ASSERT_VALID(this);
ASSERT(m_lpObject != 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->GetBoundSource(&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))
/*if(!pItem->CreateFromFile (filename,clsid)) */
AfxThrowMemoryException();
ASSERT_VALID(pItem);
pItem->Activate (OLEIVERB_SHOW,this);
ASSERT_VALID(pItem);
m_pSelection = 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 ();
/* app.Run ("Macro3");*/
mydoc.Activate ();
BOOL password=mydoc.GetHasPassword ();
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.
自己辛苦了很久加上别人的经验总算做出来。:)
(2)选择单文档视图(SDI)结构,在第3步中需要选中Container,以提供容器支持,并且选中active document container 其它都为默认
(3)在View菜单中,选ClassWizard,选Automation选项卡,选Add Class,选择From a TypeLibrary, 在Office目录中选中Microsoft Word 97/2000 类型库Word8.olb或Word9.olb,选中application,document,_document。单击ok
(4)给COfficeCntrItem添加一方法。GetIDispatch()
其源码如下:
ASSERT_VALID(this);
ASSERT(m_lpObject != 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->GetBoundSource(&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))
/*if(!pItem->CreateFromFile (filename,clsid)) */
AfxThrowMemoryException();
ASSERT_VALID(pItem);
pItem->Activate (OLEIVERB_SHOW,this);
ASSERT_VALID(pItem);
m_pSelection = 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 ();
/* app.Run ("Macro3");*/
mydoc.Activate ();
BOOL password=mydoc.GetHasPassword ();
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.
自己辛苦了很久加上别人的经验总算做出来。:)
相关文章推荐
- 在VC中调用WORD(显示,修改,存盘,运行宏)
- 在VC中调用WORD(显示,修改,存盘,运行宏)
- 在VC中调用WORD(显示,修改,存盘,运行宏)之二去掉word的常用,格式工具栏
- 在VC中调用WORD(显示,修改,存盘,运行宏)之二去掉word的常用,格式工具栏
- 在VC中调用WORD(显示,修改,存盘,运行宏)之三。调用word的各种对话框翻页等。
- 在VC中调用WORD(显示,修改,存盘,运行宏)之三。调用word的各种对话框翻页等
- 在VC中调用WORD(显示,修改,存盘,运行宏)
- 在VC中调用WORD(显示,修改,存盘,运行宏)
- 在VC中调用WORD(显示,修改,存盘,运行宏)之二去掉word的常用,格式工具栏
- JACOB调用WORD书签修改WORD文档,并生成html显示到页面中
- 【已解决】可执行程序无法在Linux上运行,显示line 1: syntax error: word unexpected (expecting ")
- 解决使用VC运行时库函数wprintf和wcount显示中文不正确的问题
- word怎么显示修改痕迹
- VC++编程通过Bluetooth API调用对话框选择蓝牙设备并显示设备信息
- 修改Ueditor工具栏字号显示方式为中文word字号显示方式
- VC 操作Word, Excel 出现"服务器正在运行中" Ole Server Busy对话框的原因分析和解决建议
- vbs 批量修改文件,bat 批处理文件调用执行vbs,并在cmd窗口打印返回值(vbs运行结果)
- VC++中调用word进行word表格的填写
- 在storyboard里设置VC的 tab bar item 的 selected image 运行tabbar不显示
- eclipse中运行wordcount任务后在hadoop0.20.2监控页面没有显示该job的问题