请问各位高手,谁知道如何通过vc访问office环境下的宏,包括读取和修改功能 请问各位高手,谁知道如何通过vc访问office环境下的宏,包括读取和修改功能,不知道您有实用的源程序么,能否发给我一份?多谢了, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://159.226.75.62/wwwboard.tech/messages/178.htmlvc调用word--------------------------------------------------------------------------------[ 跟贴 ] [ 加跟贴 ] [ 回留言板首页 ] [ FAQ ]--------------------------------------------------------------------------------Posted by wasp (256.256.256.256) on March 22, 2002 at 15:19:29: 发信人: inside (inside study++), 信区: VC标 题: 在vc中调用word发信站: 南京大学小百合站 (Sun Sep 16 08:37:50 2001), 站内信件 转自csdn ZHENG017 (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 doASSERT_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 itempDoc->UpdateAllViews(NULL);// As an arbitrary user interface design, this sets the selection// to the last item inserted.// TODO: reimplement selection as appropriate for your applicationm_pSelection = pItem; // set selection to last inserted itempDoc->UpdateAllViews(NULL);}CATCH(CException, e){if (pItem != NULL){ASSERT_VALID(pItem);pItem->Delete();}AfxMessageBox(IDP_FAILED_TO_CREATE);}END_CATCHEndWaitCursor();(7)重载ID—FILE—SAVE,void COfficeView::OnFileSave(){// TODO: Add your command handler code hereTRY{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.自己辛苦了很久加上别人的经验总算做出来。:) 你看到了:app.Run ("Macro3"); app.Run ("Macro3");是指运行名称为"Macro3"的宏么,其机制是怎样的?望请指教 你可以参考Office的帮助关于VBA编程的.比较全. COM_INTERFACE_ENTRY2问题 loadlibrary出现错误C2664 再也不来了,把分散完 我现在急需以下函数功能,请高人帮忙添加,然后发给我谢谢! WSAEnumProtocols 一个很菜的问题,一定有人知道 用CSocket接收2k的UDP包时出错,请问如何改正? 无模式窗口没有重载onok和oncancle为什么也能关闭呢? 最近被指针弄死了,这个为什么又是空?求教调试方法,怎么知道哪里传值存在后患 我要吐血了,怎么装msdn会有这种错误??!! 好心人啊,来帮帮我 如何获得鼠标点在位图上的坐标
标 题: 在vc中调用word
发信站: 南京大学小百合站 (Sun Sep 16 08:37:50 2001), 站内信件
转自csdn ZHENG017 (1)使用AppWizard创建一个新的MFC AppWizard(EXE)工程,命名为"office"
(2)选择单文档视图(SDI)结构,在第3步中需要选中Container,以提供容器支持,并且
选中active document container 其它都为默认
(3)在View菜单中,选ClassWizard,选Automation选项卡,选Add Class,选择From a T
ypeLibrary, 在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) == NO
ERROR)
{
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(""),v
False,
COleVariant(""),vFalse,vFalse,vFalse,vFalse,vFalse);
}
CATCH(CException, e)
{
}
END_CATCH
}
bulid,click insert object,and edit ,and save.maybe run macro.
自己辛苦了很久加上别人的经验总算做出来。:)
app.Run ("Macro3");