OpenOffice Calc ist eine mächtige Tabellenkalkulation, die zahlreiche eingebaute Funktionen fürs automatische Berechnen von Zelleninhalten hat. Mit StarBasic-Programmen erweitern Sie die Standard-Features.
Alle großen Tabellenkalkulationen bringen eine Makrosprache mit, in der Sie Tabellendokumente mit selbst geschriebenen Funktionen anreichern können, die komplexere Berechnungen vornehmen oder einfach für eine komfortablere Eingabe von Daten sorgen. Was bei Microsoft Excel die Programmiersprache VBA (Visual Basic for Applications) ist, heißt bei OpenOffice StarBasic.
StarBasic können Sie in allen OpenOffice-Dokumenten verwenden, also unter anderem in Writer, Calc und Impress – in diesem Artikel betrachten wir nur die Möglichkeiten, welche die Sprache Ihnen in Calc bietet.
Ein Basic-Dialekt
StarBasic ist ein Basic-Dialekt, verwendet also eine ähnliche Syntax, wie sie in den Home-Computern der 80er Jahre (C64, Schneider CPC, Atari XL etc.) üblich war. Während die klassischen Basic-Sprachen weder Funktionen oder Prozeduren noch Objektorientierung kannten und für Sprungbefehle Zeilennummern verwendet wurden, bieten die modernen Basic-Varianten alle bekannten Features anderer moderner Hochsprachen: Das macht z. B. Zeilennummern überflüssig.
Um ein erstes Makro zu erstellen, erzeugen Sie ein neues (leeres) Tabellendokument und rufen dann über Extras / Makros / Makros verwalten / Makro die Makroverwaltung auf. Abbildung 1 zeigt das erscheinende Fenster: Makros können Sie in einzelnen Dokumenten oder in Ihren privaten OpenOffice-Einstellungen ablegen.
In der Makroverwaltung sehen Sie links eine Baumansicht; ganz oben stehen Ihre eigenen Makros (Meine Makros), darunter allgemeine OpenOffice-Makros und am Schluss die Makros des neu erzeugten Dokuments, das noch keinen Namen hat und hier als Unbenannt1 erscheint. Der Teilbaum mit Ihren privaten Makros ist bereits aufgeklappt, und der Eintrag Meine Makros / Standard / Module1 markiert ist markiert. Im rechten Teil sehen Sie eine Übersicht der im Modul gespeicherten Makros: Hier gibt es nur das Makro Main. Klicken Sie ganz rechts auf die Schaltfläche Bearbeiten, um den Makro-Editor zu starten.
Es erscheint ein Editor-Fenster, das im Hauptteil nur drei Zeilen Text enthält:
REM * BASIC * Sub Main End Sub
Die erste der drei Zeilen ist nur ein Kommentar (engl.: remark), dahinter folgen Anfang und Ende einer Prozedurdeklaration: Sub Main leitet die Prozedur namens Main ein, End Sub zeigt ihr Ende an. Da zwischen diesen zwei Befehlen nur eine Leerzeile steht, tut die Prozedur gar nichts.
Das können Sie im folgenden Schritt ändern: Fügen Sie zwischen den beiden Zeilen eine weitere mit folgendem Inhalt ein:
Print "Hallo Welt"
Damit haben Sie ein erstes Programm geschrieben, das in allen Programmiersprachen als “Hello-World-Programm” bekannt ist. Klicken Sie nun in der Symbolleiste auf das zweite Icon von links (Dokument und Pfeil; BASIC-Programm ausführen). Dann erscheint ein kleines Dialogfenster mit der Meldung “Hallo Welt” (Abbildung 2).
Das ist nun nicht besonders spannend – wichtig für die Arbeit mit Tabellendokumenten ist die Möglichkeit, auf einzelne oder mehrere Tabellenzellen zuzugreifen und deren Werte auszulesen oder zu verändern.
Tabellenzellen im Griff
Um sich an einzelne Zellen heranzutasten, gehen Sie in StarBasic schrittweise vor: Zunächst müssen Sie das Dokument bestimmen, mit dem Sie arbeiten wollen – Makros werden Sie später direkt aus der Dokumentansicht heraus über einen Menüpunkt oder eine selbst vergebene Tastenkombination aufrufen, und zu diesem Zweck bietet StarBasic eine eingebaute Variable, die das aktuelle Dokument zurückgibt:
Dokument = StarDesktop.CurrentComponent
Die Variable Dokument enthält nach diesem Aufruf die Information, mit welchem Dokument Sie gerade arbeiten. Ein Tabellendokument besteht aus Tabellenblättern, die Sie in Calc über die Reiter am unteren Rand des Fensters erreichen. Diese haben meist Namen der Form Tabelle1, Tabelle2 usw., unabhängig vom Namen zählt Calc aber auch numerisch von links nach rechts und beginnt die Zählung bei 0 – das erste Tabellenblatt hat also die Nummer 0. Um nun in Ihrem Calc-Dokument, das Sie über die Variable Dokument ansprechen, auf das erste Tabellenblatt zuzugreifen, verwenden Sie die Objektfunktion Sheets():
Blatt = Dokument.Sheets(0)
Danach enthält die Variable Blatt den Verweis auf das erste Tabellenblatt. Jetzt sind Sie fast am Ziel: Einzelne Zellen in diesem Blatt sprechen Sie über die Objektfunktion getCellByPosition() an, die zwei Argumente (Spalte und Zeile) erwartet. Die Nummerierung der Spalten und Zeilen beginnt auch hier intern bei 0 – Vorsicht: Calc beginnt in der normalen Tabellenansicht mit Zeile 1 und Spalte A; die Zelle C7 wird also in StarBasic-Notation zu (2,6) – dritte Spalte, siebte Zeile. Sie erreichen diese Beispielzelle nun über
Zelle = Blatt.getCellByPosition(2,6)
Auf den Inhalt dieser Zelle können Sie nun mit drei unterschiedlichen Objektfunktionen zugreifen:
getValue()gibt einen Zahlenwert des Zellinhalts zurück – egal, ob die Zelle eine Zahl oder eine Formel enthält: im Fall einer Formel berechnet StarBasic diese und gibt das Ergebnis zurück. Wenn die Zelle Text enthält, ist der Rückgabewert 0.getString()gibt den Text zurück, der in der Tabelle steht. Das ist der Wert, den Sie in der normalen Tabellenansicht sehen können, egal ob dem ein Wert, eine Formel oder wirklich einfacher Text zugrundeliegt.getFormula()schließlich gibt bei einer Formelzelle die enthaltene Formel zurück. Steht in der Zelle keine Formel, ist der Rückgabewert derselbe String, den auchgetString()zurückgeben würde.
Um herauszufinden, von welchem Typ eine Zelle ist (Wert, Text, Formel), verwenden Sie die Objektfunktion getType(), die vier mögliche Rückgabewerte hat: 0 (leere Zelle), 1 (Wert), 2 (Text) und 3 (Formel). Die Beispielzelle C7 könnten Sie also wie folgt auswerten:
t = Zelle.getType() if t = 0 then print "C7 ist leer" if t = 1 then print "C7 enthält Wert " + Zelle.getValue() if t = 2 then print "C7 enthält Text " + Zelle.getString() if t = 3 then print "C7 enthält Formel " + Zelle.getFormula() + " mit Wert " + Zelle.getValue()
Dabei sind die if…then-Konstrukte Fallunterscheidungen: Den Befehl, der hinter then folgt, führt StarBasic nur aus, wenn die zwischen if und then stehende Bedingung erfüllt ist. Dieser Code-Ausschnitt testet also auf die vier möglichen Rückgabewerte von getType() und gibt entsprechend sinnvolle Informationen aus.
Variablen deklarieren
Alles, was mit Dokumenten zu tun hat, ist für StarBasic ein Objekt, dazu gehören geöffnete Dokumente, Tabellenblätter, Spalten, Zeilen und einzelne Zellen. Objekte (und andere Variablen) müssen Sie in StarBasic zunächst mit einem Dim-Befehl deklarieren, also den Basic-Interpreter darauf vorbereiten, dass Sie diese Variable später verwenden werden.
Die Deklarationen zusammen mit den Zugriffsbefehlen auf die einzelnen Objekte ergeben dann Listing 1.
Zelle C7 untersuchen
Sub Main Dim Dokument As Object Dim Sheet As Object Dim Zelle As Object Dim t AS Integer Dokument = StarDesktop.CurrentComponent Blatt = Dokument.Sheets(0) Zelle = Blatt.getCellByPosition(2,6) t = Zelle.getType() if t = 0 then print "C7 ist leer" if t = 1 then print "C7 enthält Wert " + Zelle.getValue() if t = 2 then print "C7 enthält Text " + Zelle.getString() if t = 3 then print "C7 enthält Formel " + Zelle.getFormula() + " mit Wert " + Zelle.getValue() End Sub
Makro ausführen
Wenn Sie nun zur Tabellenansicht zurückschalten, können Sie das Makro Main ausführen: Tragen Sie zunächst etwas in Zelle C7 ein, damit das Makro passendes Futter findet. Dann rufen Sie den Menüpunkt Extras / Makros / Makro ausführen auf. Wenn jetzt eine Fehlermeldung über eine fehlende Java-Laufzeitumgebung auftaucht, klicken Sie diese einfach weg; sie ist nicht wichtig.
Es erscheint der Dialog Makro-Selektor (Abbildung 4), in dem Sie links unter Bibliothek zunächst die Baumstruktur unter Meine Makros vollständig öffnen, bis Sie (wie in der Abbildung) den Unterpunkt Meine Makros / Standard / Module1 sehen können. Klicken Sie dann auf den Eintrag Module1, erscheint rechts unter Name des Makros eine Liste aller von Ihnen erstellten Makros – im Beispiel also nur das Makro Main. Markieren Sie es und klicken Sie auf Ausführen. Dann schließt sich das Dialogfenster, und das Makro startet. Es präsentiert eine Infobox mit der gewünschten Beschreibung von Zelle C7 (Abbildung 5).
Der Weg über den Makro-Selektor ist allerdings sehr umständlich – einfacher ist es, wenn Sie einen Menüeintrag dafür anlegen oder eine Tastenkombination vergeben, die das Makro aufruft. Das geht folgendermaßen:
Ab ins Menü
Ideal wäre es, das Makro z. B. über den (neu zu schaffenden) Menüpunkt Extras / Testmakro ausführen aufzurufen. Den neuen Eintrag erzeugen Sie mit wenigen Schritten.
- Rufen Sie den Menüpunkt Extras / Anpassen auf.
-
Es öffnet sich ein neues Fenster, das die Menüstruktur von OpenOffice Calc darstellt (Abbildung 6). Oben im Punkt OpenOffice.org Calc Menüs wählen Sie das Menü Extras aus und klicken dann rechts auf Hinzufügen.
- Ein weiteres Fenster erscheint (Abbildung 7). Scrollen Sie hier die linke Liste (Bereich) ganz nach unten und klappen Sie den Eintag OpenOffice.org Makros auf, so dass Sie den schon bekannten Punkt Meine Makros / Standard / Module1 sehen. Klicken Sie auf Module1; rechts stehen dann wieder Ihre selbst erstellten Makros. Wählen Sie das Makro Main aus und klicken Sie auf Hinzufügen.
- Schließen Sie nun das neue Fenster Befehle hinzufügen und betrachten Sie die Menüeinträge im Anpassen-Fenster: Hier ist ein neuer Punkt Main hinzugekommen. Da der Name nicht sehr ausdrucksstark ist, ändern Sie den Namen: Wählen Sie aus dem Drop-down-Menü Ändern den Eintrag Umbenennen aus. Es erscheint ein kleiner Dialog, in dem Main steht. Tragen Sie hier den gewünschten Namen für den Menüpunkt ein, z. B. Testmakro ausführen.
- Jetzt können Sie noch über die mit dicken Pfeilen beschrifteten Schaltflächen den neuen Menüeintrag an eine geeignete Stelle schieben, z. B. vor oder hinter den Untermenüeintrag Makros.
-
Schließen Sie den Anpassen-Dialog mit einem Klick auf OK – jetzt sollten Sie den neuen Menüpunkt Extras / Testmakro ausführen im Calc-Menü finden (Abbildung 7).
Noch schneller mit Hotkey
Als letzte Optimierung können Sie noch eine Tastenkombination vergeben.
- Rufen Sie dazu erneut über Extras / Anpassen den Calc-internen Menü-Editor auf und wechseln Sie dort zum Reiter Tastatur.
- Im oberen Bereich sehen Sie, welche Tastenkombinationen bereits vergeben sind. Wählen Sie eine der dort angezeigten Kombinationen aus, der in der rechten Spalte keine Funktion zugeordnet ist – z. B. [Umschalt]+[F3] (in OpenOffice-Notation Shift+F3). Markieren Sie diese Tastenkombination.
-
Im unteren Bereich Funktionen suchen Sie nun die Makros. Sie finden sie in der linken Liste ganz unten nach dem Ausklappen unter OpenOffice.org Makros / user / Standard / Module1. (Hier heißt es nicht Meine Makros, sondern user.) In der mittleren Spalte Funktion erscheinen dann die Makronamen. Markieren Sie dort das Makro Main (Abbildung 8).
- Mit einem Klick auf Ändern ordnen Sie dem Makro die Tastenkombination zu – unten rechts im Feld Tasten erscheint jetzt der neue Hotkey.
- Klicken Sie auf OK, um Ihre Änderungen zu übernehmen.
Wenn Sie jetzt im Calc-Fenster [Umschalt]+[F3] drücken, führt StarBasic Ihr Makro aus, das über den Inhalt der Zelle C7 informiert.
Der Anfang ist gemacht
In dieser Einführung haben wir Grundelemente der StarBasic-Sprache vorgestellt, mit denen Sie auf einzelne Zellen in Calc-Dokumenten zugreifen können. Richtig spannend wird es, wenn Sie mit Programmierelementen wie Schleifen, bedingten Verzweigungen und Unterfunktionen arbeiten: Darum wird es im zweiten Teil dieses Workshops gehen, den Sie in der nächsten EasyLinux-Ausgabe finden.
Infos
[1] StarOffice 8 Programmierhandbuch für BASIC: http://docs.sun.com/app/docs/doc/819-1326








