<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Automation (COM) mit OpenOffice: PropertySet(?)]]></title><description><![CDATA[<p>Hallo,</p>
<p>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 &quot;replaceAll&quot; (Suchen/Ersetzen) brauche.</p>
<p>Weiß jemand, wie man über die COM-Schnittstelle diesen Search-Deskriptor richtig erstellt?<br />
Ich vermute, daß deswegen &quot;replaceAll&quot; ein &quot;Ausnahmefehler aufgetreten&quot; zurückgibt. Alle anderen Funktionen davor klappen auch bis dahin.</p>
<p>Hier mein bisheriger Code:</p>
<pre><code class="language-cpp">if (FAILED(RSCom::Invoke(m_ooDoc, DISPATCH_METHOD, &amp;vresult, NULL, NULL, OLESTR(&quot;createReplaceDescriptor&quot;), NULL))) {
      return false;
   }
   LPDISPATCH preplaceDesc = V_DISPATCH(&amp;vresult);
   preplaceDesc-&gt;AddRef();
   if (FAILED(RSCom::Invoke(preplaceDesc, DISPATCH_METHOD, &amp;vresult, NULL, NULL, OLESTR(&quot;setSearchString&quot;), TEXT(&quot;v&quot;), vsearch))) {
      return false;
   }
   //ReplaceString setzen
   VARIANT vreplace;
   vreplace.vt = VT_BSTR;
   vreplace.bstrVal = SysAllocString(RSCom::RSQStringToBSTR(replaceString));
   if (FAILED(RSCom::Invoke(preplaceDesc, DISPATCH_METHOD, &amp;vresult, NULL, NULL, OLESTR(&quot;setReplaceString&quot;), TEXT(&quot;v&quot;), vreplace))) {
      return false;
   }
   SAFEARRAY* psafeReplaceArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
   LPDISPATCH psetReplaceString = V_DISPATCH(&amp;vresult);
   long index = 0;
   HRESULT hr = SafeArrayPutElement(psafeReplaceArray, &amp;index, &amp;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, &amp;vresult, NULL, NULL, OLESTR(&quot;replaceAll&quot;), TEXT(&quot;v&quot;), vsearchDesc[0]))) {
      return false;
   }
</code></pre>
<p>Vielen Dank schon mal für eure Hilfe.</p>
<p>Gruß,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244666/automation-com-mit-openoffice-propertyset</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Apr 2026 22:40:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244666.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Jul 2009 14:01:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Automation (COM) mit OpenOffice: PropertySet(?) on Fri, 03 Jul 2009 14:01:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>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 &quot;replaceAll&quot; (Suchen/Ersetzen) brauche.</p>
<p>Weiß jemand, wie man über die COM-Schnittstelle diesen Search-Deskriptor richtig erstellt?<br />
Ich vermute, daß deswegen &quot;replaceAll&quot; ein &quot;Ausnahmefehler aufgetreten&quot; zurückgibt. Alle anderen Funktionen davor klappen auch bis dahin.</p>
<p>Hier mein bisheriger Code:</p>
<pre><code class="language-cpp">if (FAILED(RSCom::Invoke(m_ooDoc, DISPATCH_METHOD, &amp;vresult, NULL, NULL, OLESTR(&quot;createReplaceDescriptor&quot;), NULL))) {
      return false;
   }
   LPDISPATCH preplaceDesc = V_DISPATCH(&amp;vresult);
   preplaceDesc-&gt;AddRef();
   if (FAILED(RSCom::Invoke(preplaceDesc, DISPATCH_METHOD, &amp;vresult, NULL, NULL, OLESTR(&quot;setSearchString&quot;), TEXT(&quot;v&quot;), vsearch))) {
      return false;
   }
   //ReplaceString setzen
   VARIANT vreplace;
   vreplace.vt = VT_BSTR;
   vreplace.bstrVal = SysAllocString(RSCom::RSQStringToBSTR(replaceString));
   if (FAILED(RSCom::Invoke(preplaceDesc, DISPATCH_METHOD, &amp;vresult, NULL, NULL, OLESTR(&quot;setReplaceString&quot;), TEXT(&quot;v&quot;), vreplace))) {
      return false;
   }
   SAFEARRAY* psafeReplaceArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
   LPDISPATCH psetReplaceString = V_DISPATCH(&amp;vresult);
   long index = 0;
   HRESULT hr = SafeArrayPutElement(psafeReplaceArray, &amp;index, &amp;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, &amp;vresult, NULL, NULL, OLESTR(&quot;replaceAll&quot;), TEXT(&quot;v&quot;), vsearchDesc[0]))) {
      return false;
   }
</code></pre>
<p>Vielen Dank schon mal für eure Hilfe.</p>
<p>Gruß,</p>
<p>Tobias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736659</guid><dc:creator><![CDATA[Sir_Tobias]]></dc:creator><pubDate>Fri, 03 Jul 2009 14:01:11 GMT</pubDate></item></channel></rss>