(c) James Steidl, Fotolia

Power-Makros

Workshop OpenOffice StarBasic, Teil 3

24.09.2009
Die ersten zwei Teile der Workshop-Reihe haben Ihnen die Grundlagen der Makroprogrammierung vorgestellt. In dieser Ausgabe zeigen wir einige Spezialfunktionen und stellen auch den VBA-Support vor.

OpenOffice bietet mit StarBasic eine mächtige Makrosprache, die in Anlehnung an Microsofts Visual Basic for Applications (VBA) entstanden ist. Während sich die Grundelemente der beiden Programmiersprachen (wie Schleifen, If-Then-Else-Konstruktionen und mit Sub definierte Unterprogramme) stark ähneln, unterscheiden sich die Objektkonzepte bei VBA und StarBasic sehr stark. Für ein wirkliches Verständnis der (Objekt-)Methoden, mit denen Sie in StarBasic Tabellen beeinflussen können, würde unsere Workshop-Reihe zu weit gehen, dafür ist die Lektüre eines längeren StarBasic-Buchs nötig, etwa [1]. Wir zeigen Ihnen darum Beispielcode für einige häufig benötigte Zugriffsmethoden, mit dem Sie etwa die aktuelle Auswahl (die markierten Zellen) herausfinden und damit arbeiten können. Außerdem stellen wir Ihnen den in OpenOffice integrierten VBA-Support vor, über den Sie – zumindest teilweise – Makroprogramme aus Excel-Dokumenten auch in OpenOffice nutzen können.

Zellbereiche verwenden

Im letzten Teil des Workshops haben wir Ihnen Funktionen Wert = Get(x,y) und Put(x,y,Wert) vorgestellt, mit denen Sie direkt auf die Inhalte bestimmter Zellen zugreifen können, sie verwendeten beide die OpenOffice-Methode getCellByPosition(x,y). Sie können in ähnlicher Weise auch ganze Bereiche manipulieren – um etwa die Zellen B2 bis C5 kursiv zu formatieren, könnten Sie den Code in Listing 1 benutzen.

Bereich kursiv setzen

Sub Kursiv ()
  Bereich = ThisComponent.Sheets(0).getCellRangeByName("B2:C5")
  Bereich.CharPosture = com.sun.star.awt.FontSlant.ITALIC
End Sub

Die Methode getCellRangeByName arbeitet ähnlich wie getCellByPosition(x,y), erwartet aber eine Bereichsangabe der Form "B2:C5". Die kursive Schrift setzen Sie, indem Sie dem Attribut CharPosture der Bereichsvariable den konstanten Wert com.sun.star.awt.FontSlant.ITALIC zuweisen. Um die Schrägstellung wieder zu entfernen, würden Sie stattdessen com.sun.star.awt.FontSlant.NONE verwenden. Eine Übersicht weiterer Schrifteigenschaften, die Sie auf ähnliche Weise nutzen können, finden Sie in der StarBasic-Dokumentation [2] im Abschnitt Constant Groups, ein Beispiel wäre com.sun.star.awt.FontWeight.BOLD – diesen Wert (der fette Schrift repräsentiert) müssen Sie aber dem Attribut CharWeight zuweisen, also

Bereich.CharWeight = com.sun.star.awt.FontWeight.BOLD

Weitere Zeichenattribute finden Sie im OpenOffice-Wiki [3]. Sie könnten theoretisch auch den Makro-Rekorder verwenden, um solche einfachen Formatänderungen aufzuzeichnen. Abbildung 1 zeigt den Code, den Sie mit dem Makrorekorder erzeugen, indem Sie zunächst die Aufzeichnung starten, dann den Zellbereich B2:C5 markieren, auf die Kursiv-Schaltfläche klicken und schließlich die Aufzeichnung stoppen. Im Ergebnis leistet dies das Gleiche, der Code ist aber für weitere Anpassungen kaum geeignet: Alle mit dem Rekorder aufgezeichneten Makros verwenden das so genannte UNO-Interface (Universal Network Objects) von StarBasic, das keine direkt verständlichen Anweisungen (wie "Setze die Schrift in den markierten Zellen fett") kennt, sondern sehr umständlich Argumentlisten aufbaut und dann dem so genannten Dispatcher übergibt, der die darin enthaltenen Anweisungen interpretiert und umsetzt.

Abbildung 1: Diesen Code erzeugt der Makrorekorder, wenn Sie den Zellbereich "B2:C5" markieren und auf die Kursiv-Schaltfläche klicken.

Wer professionell OpenOffice-Makros erstellen will, wird an einer Einarbeitung in UNO nicht vorbei kommen (und kann dann auch wieder von den Aufzeichnungen des Makro-Rekorders profitieren), für den Hausgebrauch ist es nicht sinnvoll, sich mit UNO zu beschäftigen.

Mit der Auswahl arbeiten

Der bisher gezeigte Code kann nun mit Zellbereichen arbeiten, aber nur mit vorab festgelegten. Wollen Sie ein Makro schreiben, das beliebige markierte Zellen verändert, hilft Ihnen dieses Verfahren nicht weiter. OpenOffice bietet aber eine Möglichkeit, herauszufinden, welche Zellen in der Tabelle derzeit markiert sind.

Die Methode ThisComponent.getCurrentSelection() gibt die aktuelle Auswahl (engl. selection) zurück. Hierbei gibt es allerdings die Schwierigkeit, dass unterschiedliche Auswahl möglich sind: eine einzelne markierte Zelle, ein Bereich (wie B2:C5) oder eine Reihe von nicht zusammenhängenden Bereichen (wie B2:C5, F6:G8) – schließlich unterstützt Calc Mehrfachauswahlen.

Wann immer Sie also mit einer Auswahl arbeiten, sollten Sie zunächst prüfen, um welchen Typ von Auswahl es sich handelt – tun Sie das nicht, kann es sein, dass Ihr Makro nicht funktioniert. Um welche Art von Auswahl es sich handelt, können Sie mit der Methode supportsService feststellen: Listing 2 zeigt ein Beispiel dafür, und in Abbildung 2 sehen Sie, wie dieses Makro korrekt eine Mehrfachauswahl erkennt.

Zelle, Einfach- oder Mehrfachauswahl?

Sub AuswahlPruefen
  Auswahl = ThisComponent.getCurrentSelection
  If     Auswahl.supportsService("com.sun.star.sheet.SheetCell")       Then
    MsgBox ("einzelne Zelle")
  ElseIf Auswahl.supportsService("com.sun.star.sheet.SheetCellRange")  Then
    MsgBox ("Einfachauswahl")
  ElseIf Auswahl.supportsService("com.sun.star.sheet.SheetCellRanges") Then
    MsgBox ("Mehrfachauswahl")
  End If
End Sub
Abbildung 2: Das Makro aus Listing 2 hat im Beispiel eine Mehrfachauswahl erkannt.

Wie Sie im Detail die einzelnen Zellen eines markierten Bereichs ansprechen, erfahren Sie im folgenden Absatz; vorher stellen wir den VBA-Support vor, der diese Aufgabe deutlich erleichtert. Wenn Sie keinen Wert darauf legen, "reine" StarBasic-Makros (ohne VBA-Elemente) zu erstellen, können Sie die Programmierung deutlich beschleunigen.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Tabellenprogrammierer
    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.
  • Tabelle unter Kontrolle
    OpenOffice bringt eine eigene Makro-Programmiersprache mit: Mit StarBasic können Sie umständliche manuelle Tätigkeiten automatisieren. Wir stellen Variablen, Kontrollstrukturen und Schleifen vor.
  • StarBasic
  • Automatikgetriebe
    Makros automatisieren wiederkehrende Tätigkeiten in OpenOffice. Schon mit wenigen Zeilen Programmcode hört im virtuellen Büro alles auf Ihr Kommando.
  • Migration Microsoft Office 2000 zu StarOffice 5.2 - Teil 2
    Beim letzten Mal zeigten wir Ihnen, welche Unterschiede zwischen Microsoft Office und StarOffice in der Bedienung existieren. In diesem zweiten Teil beschäftigen wir uns mit dem Import bereits vorliegender Dokumente. Da dies den schwierigsten Teil des gesamten Umstiegs darstellt, widmen wir den Workshop-Teil vollständig diesem Thema.
Kommentare

Infos zur Publikation

title_2014_03

Digitale Ausgabe: Preis € 9,80
(inkl. 19% MwSt.)

EasyLinux erscheint vierteljährlich und kostet EUR 9,80. Weitere Informationen zum Heft finden Sie auf der EasyLinux-Homepage.

Das EasyLinux-Jahresabo mit Prämie kostet ab EUR 33,30. Details zum EasyLinux-Jahresabo finden Sie im Medialinx-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!      

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...
Öhm - wozu Benutzername, wenn man dann hier mit Klarnamen angezeigt wird?
Thomas Kallay, 03.07.2014 20:30, 1 Antworten
Hallo Team von Linux-Community, kleine Zwischenfrage: warum muß man beim Registrieren einen Us...
openSUSE 13.1 - Login-Problem wg. Fehler im Intel-Grafiktreiber?
Thomas Kallay, 03.07.2014 20:26, 8 Antworten
Hallo Linux-Community, habe hier ein sogenanntes Hybrid-Notebook laufen, mit einer Intel-HD460...
Fernwartung für Linux?
Alfred Böllmann, 20.06.2014 15:30, 7 Antworten
Hi liebe Linux-Freunde, bin beim klassischen Probleme googeln auf www.expertiger.de gestoßen, ei...