S
Hallo,
ich versuche, OpenOffice über die Automation-Schnittstelle (COM) anzusteuern. Jedoch weiß ich nicht, wie ich PropertySets anlegen soll, da ich sie für die Funktion "replaceAll" (Suchen/Ersetzen) brauche.
Weiß jemand, wie man über die COM-Schnittstelle diesen Search-Deskriptor richtig erstellt?
Ich vermute, daß deswegen "replaceAll" ein "Ausnahmefehler aufgetreten" zurückgibt. Alle anderen Funktionen davor klappen auch bis dahin.
Hier mein bisheriger Code:
if (FAILED(RSCom::Invoke(m_ooDoc, DISPATCH_METHOD, &vresult, NULL, NULL, OLESTR("createReplaceDescriptor"), NULL))) {
return false;
}
LPDISPATCH preplaceDesc = V_DISPATCH(&vresult);
preplaceDesc->AddRef();
if (FAILED(RSCom::Invoke(preplaceDesc, DISPATCH_METHOD, &vresult, NULL, NULL, OLESTR("setSearchString"), TEXT("v"), vsearch))) {
return false;
}
//ReplaceString setzen
VARIANT vreplace;
vreplace.vt = VT_BSTR;
vreplace.bstrVal = SysAllocString(RSCom::RSQStringToBSTR(replaceString));
if (FAILED(RSCom::Invoke(preplaceDesc, DISPATCH_METHOD, &vresult, NULL, NULL, OLESTR("setReplaceString"), TEXT("v"), vreplace))) {
return false;
}
SAFEARRAY* psafeReplaceArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
LPDISPATCH psetReplaceString = V_DISPATCH(&vresult);
long index = 0;
HRESULT hr = SafeArrayPutElement(psafeReplaceArray, &index, &vresult);
VARIANT vsearchDesc[1];
vsearchDesc[0].vt = VT_VARIANT | VT_ARRAY;
vsearchDesc[0].parray = psafeReplaceArray;
//XReplace-Interface aufrufen
if (FAILED(RSCom::Invoke(m_ooDoc, DISPATCH_METHOD, &vresult, NULL, NULL, OLESTR("replaceAll"), TEXT("v"), vsearchDesc[0]))) {
return false;
}
Vielen Dank schon mal für eure Hilfe.
Gruß,
Tobias