OpenOffice XComponent XTextDocument schliessen

mr.aladin

Cadet 1st Year
Registriert
Mai 2006
Beiträge
11
Hallo,

weiss jmd., wie man ein OpenOffice XComponent oder XTextDocument mit C++ mit UNO von OpenOffice schliesst.

Ein Object o vom Typ Reference<XComponent> könnte man mit der Methode dispose() schliessen, allerdings ist das von Seiten OpenOffice DevGuide NICHT gewünscht bzw. "discouraged".

Das gleiche könnte man mit dem Object o1 vom Typ Reference<XTextDocument> machen.
Wenn man ein neues Object o2 erstellt:

Reference<XCloseable> rCloseable(xTextDocument, UNO_QUERY);
rCloseable->close(sal_False); //Normales schliessen

Alle Methoden enden damit, dass OpenOffice hängen bleibt: sozusagen endlosschleife im OpenOffice. Irgendwo haben die ein Bug drin oder was auch immer.

Hat jmd ne Lösung, ausser einen Task zu killen?
Wäre sehr wichtig.
 
OpenOffice ist eigentlich ganz gut, nur mit dem SDK ist es nicht zu gebrauchen.

Eine XComponent kann man dann ohne Probleme schliessen:

Sleep(1500); //WICHTIG: WERT ANPASSEN, denn sonst hängt das OpenOffice beim close(false) Befehl, weil es vorkommen kann, dass zu einem Zeitpunkt mehrere Instanzen offen sind, weil das OO langsamer ist und sich nicht so schnell schliesst. Ein folgendes Schliessen, so nehme ich an, schliesst dann mehrere Instanzen und das führt irgendwie zum Hängen. Leider gibt es keine richtig gute Dokumentation darüber...nur durch Probieren ist es möglich, etwas zum Laufen zu bekommen. Ein Thread Killen und Prozess abschiessen würde ich nicht empfehlen, denn das führt auch zu keinem ordentlichen Ergebnis -> OO Absturz im nachfolgenden Dokument.

Allerdings tritt das Problem nur auf, wenn man sehr schnell nacheinander Dokumente anlegt und schliesst.

Reference<XCloseable> rCloseable(xComponent, UNO_QUERY);
rCloseable->close(sal_False); //Normales schliessen //jetzt kein Hängen mehr

Empfehlung: Wenn msword.tlb (API von MS Word) vorhanden ist, sollte man diese nutzen, denn die hat das besagte Problem nicht und ist wesentlich schneller zu bedienen als das OO)
 
Zuletzt bearbeitet:
Empfehlung: Wenn msword.tlb (API von MS Word) vorhanden ist, sollte man diese nutzen, denn die hat das besagte Problem nicht und ist wesentlich schneller zu bedienen als das OO)
Das setzt voraus, das auf jedem Computer der dein Programm ausführt MS Word installiert sein muss. Nur die TLB reicht da nicht. Dafür hat Word viele andere Probleme beim Automatisieren (Fremdsteuerung durch eigene Programme) auch beim Öffnen und Schließen vieler Dokumente schnell hintereinander. Das OpenOffice Dateiformat ist offen / frei verfügbar. Es ist ein gezipptes Archive von XML Dateien die man entsprechend entzippen und direkt bearbeiten kann. Ich denke dieser Vorgang sollte wesentlich schneller sein, als das Öffnen von OpenOffice und bearbeiten über die SDK/API. siehe Dateiformat OpenOffice Das Entpacken der Datei kannst du über Freeware Tools wie 7zip (starte einfach einen neuen Prozess mit der entsprechenden Kommandozeile) erledigen und dann nur noch Text der content.xml Datei auslesen/ändern/speichern und wieder zippen.

Der Text deines Dokumentes befindet sich zwischen den text tags (das tag hat weitere Attribute die ich da mal ausgelassen habe)
Code:
<text:p>Ich bin ein Test.</text:p>
 
Zuletzt bearbeitet:
Zurück
Oben