Erste Erfahrungen mit der Automation-Schnittstelle von Open Office
Günter Beyes
gbeyes@gmx.de12. November 2006
Im Vergleich zu Microsoft Office ist die Arbeit mit OpenOffice.org (OOo) über die Automation-Schnittstelle recht mühevoll.
Sun Microsystems bevorzugt die plattformunabhängige Architektur. Daher gibt es keine Type Libraries (weil Windows-spezifisch) und somit auch keine Möglichkeit, die verfügbaren Instanzvariablen, Methoden und Parameter mit einem Typelib-Browser zu erkunden und in knapper Form zu dokumentieren.
Was bleibt, ist die im Web als PDF und HTML erhältliche Dokumentation. Auch einige Bücher sind auf dem Markt, die ich aber nicht beurteilen kann.
Das Automation-API von Open Office ist außerordentlich komplex; man gewinnt den Eindruck, daß ein nennenswerter Teil der Java-Laufzeitumgebung hier Einzug gehalten hat. Entsprechend ist die (englischsprachige) offizielle Dokumentation extrem umfangreich. Sie bietet weit mehr Informationen, als man für die Entwicklung einer typischen Automation-Lösung unmittelbar braucht. Es ist daher nicht leicht, sich zurechtzufinden oder zum Beispiel schnell mal den Namen und die Parameter einer Methode nachzuschauen.
Als deutschsprachige Einführung gibt es das StarOffice 8 Programmierhandbuch für BASIC.
Codebeispiele sind immer gut, um schnell Ergebnisse zu sehen. Die von Sun veröffentlichten sind zumeist in Java oder StarOffice Basic gehalten, und sie nach Xbase++ zu portieren ist nicht immer einfach. Mitunter muß man dabei auf den undokumentierten Bereich von Xbase++ zurückgreifen.
Manche OOo-Objekte, wie zum Beispiel das für Eigenschaftslisten und Parameterübergaben viel verwendete Property-Array, erfordern in der Xbase++ - Implementierung einige Klimmzüge. (Der im folgenden gezeigte Beispielcode wird darauf eingehen.) Dies mag daran liegen, daß dem ActiveX-Subsystem innerhalb Xbase++ für die Interpretation von Parametern und Rückgabewerten die Typelib fehlt. Allerdings hat es auch den Anschein, daß Xbase++ die besonderen Eigenschaften von OOo-Objekten nicht berücksichtigt, welche das Fehlen einer Typelib durchaus wettmachen können.
Denn OpenOffice verfügt über einen eigenen Objektinspektor. Mit Hilfe der Klassen "com.sun.star.beans.Introspection" und "com.sun.star.reflection.CoreReflection" kann man bei Bedarf für ein Objekt den Klassennamen, Listen der Instanzvariablen, Methoden und Interfaces sowie Parameterinformationen erfahren. Die Verwandtschaft mit Java ist eben nicht zu leugnen.
Noch eine Besonderheit ist erwähnenswert. OOo-Objekten ist nicht unmittelbar anzusehen, welcher Klasse sie angehören; die Instanzvariablen :CLSID und :Server sind leer. Das liegt zweifellos daran, daß sie mit Ausnahme von "com.sun.star.ServiceManager" nicht über den ActiveX-Mechanismus CreateObject(), sondern letzten Endes von eben diesem Servicemanager erzeugt werden. Dabei ist "Service" in der OOo-Sprechweise annähernd dem Begriff "Klasse" gleichzusetzen. Wenn nötig, kann der eingebaute Objektinspektor dieses Manko jedoch mehr als ausgleichen.
Der Xbase++ - Beispielcode zeigt, wie einige der typischen Aufgaben der Textverarbeitung via Automation mit Open Office gelöst werden können:
* Open Office sichtbar oder unsichtbar starten
* Neu anlegen einer Textdatei
* Öffnen einer vorhandenen Textdatei
* Ermitteln der Dokumenteigenschaften
* Speichern in den Formaten
OpenOffice
MS Word
RTF
HTML
PDF
* Dokument auf dem Standarddrucker ausgeben
* Ausgabedrucker festlegen
* Ermitteln der Druckereigenschaften
* Setzen der Druckparameter
Anzahl der Kopien
Collation
Seitenbereiche
Ausgabe in Druckdatei
* Auf Druckbeendigung warten
Wer sich weiter mit dem Thema befassen möchte, findet hier mehr als genug Nahrung:
OpenOffice.org 2.0 Downloads
{http://download.openoffice.org/2.0.4/index.html}
OpenOffice.org SDK 2.x
{http://download.openoffice.org/680/sdk.htm}
StarOffice 8 Programmierhandbuch für BASIC
{http://docs.sun.com/app/docs/doc/819-1326?l=de}
Makros in StarOffice Basic und Automation-Implementierungen in anderen Programmiersprachen wie Delphi, Python, C++ und Visual Foxpro
{http://ooomacros.org/dev.php}
Das OpenOffice.org Forum
{http://www.oooforum.org}
Automating OpenOffice.org, ein Tutorial
{http://udk.openoffice.org/common/man/tutorial/office_automation.html}
Programming OpenOffice.org with Visual Basic, ein Tutorial
{http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html}