当前位置: 代码迷 >> VBA >> 怎么像操作Word一样去操作Word文档里面一个Word类型的OLE对象(100分求急救)
  详细解决方案

怎么像操作Word一样去操作Word文档里面一个Word类型的OLE对象(100分求急救)

热度:3815   发布时间:2013-02-26 00:00:00.0
如何像操作Word一样去操作Word文档里面一个Word类型的OLE对象(100分求急救)?
C/C++ code
    _Application wordapp;    Documents docs;    _Document doc;    Range aRange;    // 读取OLE对象    InlineShapes inlineShapes;    InlineShape  inlineSpape;        COleVariant vTrue((short)TRUE),            vFalse((short)FALSE),            vOpt((long)DISP_E_PARAMNOTFOUND,  VT_ERROR);         Selection wdSel;         DWORD dwTick = GetTickCount();    if (!wordapp.CreateDispatch(L"Word.application",NULL))    {        AfxMessageBox(L"office is not installed." , MB_OK|MB_SETFOREGROUND);         CoUninitialize();        return FALSE;    }    dwTick = GetTickCount() - dwTick;    TRACE(_T("CreateDispatch time is : %d\r\n"), dwTick);        // 把word设置成不可见    wordapp.SetVisible(FALSE);        // 创建文档     docs = wordapp.GetDocuments();    dwTick = GetTickCount();    doc = docs.Open(COleVariant(m_strFilePath),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);      dwTick = GetTickCount() - dwTick;    TRACE(_T("Open Word's time is : %d\r\n"), dwTick);    // 读取OLE对象    IDispatch *dispatch = doc.GetInlineShapes();    if(dispatch)    {        inlineShapes.AttachDispatch(dispatch);    }     int nOLECount = inlineShapes.GetCount();    if(nOLECount>0)    {        for (int i = 1; i <= nOLECount; i++)        {            inlineSpape.AttachDispatch(inlineShapes.Item((long)i));            OLEFormat OLEForm;            dispatch = inlineSpape.GetOLEFormat();            if (dispatch)            {                OLEForm.AttachDispatch(dispatch);            }////////////// 问题出现处//////////////////////////        }    }    doc.Close(vOpt,vOpt,vOpt);    wordapp.Quit(vOpt,vOpt,vOpt);    aRange.DetachDispatch();    inlineSpape.DetachDispatch();    inlineShapes.DetachDispatch();    doc.DetachDispatch();    docs.DetachDispatch();    wordapp.DetachDispatch();            return TRUE;

// 通过这样得到OLEFormat OLEForm对象后(该对象也是一个Word),如何那访问Word一样去访问???
// 我想获取OLE对象,如果OLE对象也是Office,就对它进一步解析,获取OLE对象里面的字符串,如果OLE对象再包含OLE对象,就用递归一直找到没有OLE对象为止,但是获取的OLE对象不知如何获取OLE对象里面的字符串,不知如何像前面那样打一个Word一样对OLE对象进行操作??
在这里看到一个:http://topic.csdn.net/u/20070510/08/646444b1-8946-4874-8fe7-0f278f311abe
但是到后面也没说清楚如何像访问Word一样去访问OLE对象
已经搞了2天了,也没能弄好,希望有经验的朋友帮帮忙!!

------解决方案--------------------------------------------------------
发在c++可以有人知道
------解决方案--------------------------------------------------------
直接转换OLEForm.Object为Word类型
  相关解决方案