Automation (COM) mit OpenOffice: PropertySet(?)



  • 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


Anmelden zum Antworten