OLE Automation Word (Tabellen einfügen, ...)
-
Hallo,
Ich versuche gerade über OLE Automation Word in mein Programm auf ein Word Document zuzugreifen.
Ich nutze hierzu ein Beispiel von Codeproject.
In diesem Beispiel wird beschrieben wie man über die VB Makro Erstellung in einem Word Document (Menu/Extras/Makros/Aufzeichnen) an den Weg gelangt, seinen Projectweg der OLE Automation zu erweitern und sich eigene Funktion zu erstellen.
Ich denke das ich das Pronziep dahinter verstanden habe, jedoch hapert es mit der COleVariant, VARIANT & IDispatch.
Es gelingt mir teilweise, eigene Funktionen wie Textmarke, Kopf/Fußzeile und Text einfügen, Schriften zuzuweisen, auf der grundlage seiner OleMethode-Funktion zu ertsellen. Die auch reibungslos funktionieren.Jedoch Komplexere Aufrufe, an die mehr Parameter übergeben werden scheitern.
Ich versuche gerade eine Tabelle in einem Worddocument zu erstellen und als Rückmeldung beim Debugen der OleMethode bekomme ich Typkonflikt. Ich habe jetzt schon in der MSDN nachgekuckt
http://msdn.microsoft.com/en-us/library/ff845710(v=office.14).aspx
und es müßen zwischen 3 & 5 Parameter übergeben werden.
der Kürzeste Weg mit dem ich über VB (Makro) in einem Word Document eine Tabelle einfüge istActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=4, NumColumns:=3
Nach ausführen des Makros in dem Word-Document sehe ich die gewünschte Tabelle.
Ich denke das ich Variant in meinem Programm einen falschen Paramter zur Typenbestimmung übergebe.
hier mal mein Code.//*.h #define OLESTR_ADD L"Add" //*.cpp in der Funktion AddTable IDispatch *pApp = OnApplication (m_pActiveDocument); IDispatch *pSelection = OnSelection (pApp); IDispatch *pRange = OnRange (pSelection); IDispatch *pTables = OnTables (m_pActiveDocument); //ADD Tables { COleVariant vDefaultTableBehavior ((BYTE)wdWord9TableBehavior); COleVariant vAutoFitBehavior ((BYTE)wdAutoFitFixed); VARIANT varCol,varRow,result;//Ich denke dashier der Typkonfligt entsteht varCol.vt = VT_I4; varCol.lVal = iColumns;//Type int = 3 varRow.vt = VT_I4; varRow.lVal = iRows;//Type int = 4 VariantInit(&result); VARIANT varRange; varRange.vt = VT_DISPATCH; varRange.pdispVal = pRange; m_hr = OnOLE(DISPATCH_METHOD, &result, pTables, OLESTR_ADD, 3,varRange,varRow,varCol); if(FAILED(m_hr)) TRACE_STR(_T("Add Tables Fehlgeschlagen")); } pRange->Release(); pSelection->Release(); pApp->Release(); pTables->Release();
kann mir da jemand weiterhelfen? wo verursache ich den Typkonflikt?
beim einfügen einer Textmarke in den Bookmarks Bereich klappt das.