- 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类型