Zum Inhalt springen
Der Guide für ein smartes Leben.
Reise ins Openoffice-UNOVersum

Jenseits vom Horizont

Autor: Redaktion pcmagazin • 4.12.2009 • ca. 2:10 Min

Jenseits vom Horizont Basic-Kenntnisse sind nur eine Voraussetzung für die Programmierung von OpenOffice. Wer die zahllosen Funktionen der einzelnen Anwendungen für eigene Zwecke "fernsteuern" oder aus einem Makro heraus auf verschiedenste Dokumentinhalte wie Texte, Zahlen oder Grafiken zugreife...

Jenseits vom Horizont

Basic-Kenntnisse sind nur eine Voraussetzung für die Programmierung von OpenOffice. Wer die zahllosen Funktionen der einzelnen Anwendungen für eigene Zwecke "fernsteuern" oder aus einem Makro heraus auf verschiedenste Dokumentinhalte wie Texte, Zahlen oder Grafiken zugreifen möchte, muss wissen, wie sich die einzelnen Bestandteile des Office-Pakets programmiertechnisch ansprechen lassen. Und spätestens hier enden die Gemeinsamkeiten.

In der Microsoft-Welt erfolgt der Zugriff auf Word, Excel & Co. über ein hierarchisch strukturiertes Objektmodell, bei dem jedes Objekt ein bestimmtes Element der Anwendung repräsentiert. Die (englischen) Namen dieser Objekte kann man sich sehr gut merken, weil sie das jeweilige Office-Element zumeist treffend beschreiben.

Da gibt es etwa das ActiveDocument-Objekt, über das ein Makro direkt auf das aktuell geöffnete Word-Dokument zugreifen kann. Oder ein Objekt namens Selection, das dem Makro verrät, welchen Text, welche Zahl oder Grafik der Anwender gerade markiert hat.

Im Kosmos der OpenOffice-Programmierung sind die Dinge komplizierter. Die hier verwendete Programmierschnittstelle trägt den Namen Universal Network Objects (UNO) und enthält - über 55 Module verteilt - zahllose Objekte, bei denen die Verbindung zu den realen Bestandteilen der einzelnen OpenOffice-Anwendungen nur selten auf Anhieb zu erkennen ist.

Auch UNO-Objekte verfügen über Eigenschaften, die man auslesen und zumeist verändern kann, sowie Methoden, die eine bestimmte Aktion auslösen. Welche Eigenschaften und Methoden das im Einzelfall sind, verrät eine abstrakte Beschreibung, die als Dienst (oder Service) bezeichnet wird. Der Begriff Dienst entspricht damit ziemlich genau dem Begriff Klasse, der in anderen objektorientierten Programmiersprachen Verwendung findet.

Der vollständige Name eines Dienstes setzt sich aus drei Bestandteilen zusammen: dem stets gleichen Präfix com.sun.star, dem Namen des UNO-Moduls, das den Dienst bereitstellt, sowie dem eigentlichen Dienstnamen. Alle Namensbestandteile werden mit Punkten voneinander getrennt. Ein vollständiger Dienstname könnte also so aussehen:

com.sun.star.text.Paragraph

Im Unterschied zu VBA ist es extrem wichtig, die vorgegebene Groß- /Kleinschreibung genau zu beachten. Auf ein sorglos eingetipptes Com.Sun.Star.Text.paragraph etwa reagiert OpenOffice mit einem sofortigen Laufzeitfehler. Die völlig unterschiedlichen Objektmodelle sind übrigens der Grund dafür, dass die automatische Übernahme von VBA-Makros, die in OpenOffice ab Version 2.3 grundsätzlich möglich ist, nur bei extrem einfach gestrickten Makros, die kaum mehr als reinen Basic-Code enthalten, funktioniert.

Grenzerfahrung

Im Unterschied zu den gebrauchsfertigen Microsoft-Office-Objekten muss man viele UNO-Objekte zunächst einmal selbst erzeugen. Dazu benötigt man eine Variable vom Typ Object...

Dim objPalette As Object

... und weist ihr anschließend eine Instanz des zuständigen UNO-Dienstes zu. Das fällt (unter anderem) in die Zuständigkeit der UNO-Funktion CreateUnoService, der man den vollständigen Namen des gewünschten Dienstes als Argument übergibt. Das Beispiel

objPalette = createUnoService _("com.sun.star.drawing.ColorTable")

legt ein Objekt namens objPalette an, das auf den Dienst ColorTable im UNO-Modul drawing verweist (man beachte, dass die Zuweisung ohne das VBA-übliche Schlüsselwort Set erfolgen darf). ColorTable ist ein kontextunabhängiger Dienst für den Zugriff auf die Farbpalette von OpenOffice. Kontextunabhängig heißt, dass der Dienst universell in jeder Anwendung und Programmiersituation verfügbar ist.