Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
LibreOffice Basic<br />
Titel<br />
links in einer Baumstruktur<br />
auch Ihr aktuelles Dokument<br />
anzeigt (im Beispiel: easylinux01.ods).<br />
Der Eintrag Meine<br />
Makros sollte einen Untereintrag<br />
Standard haben, <strong>und</strong> darunter<br />
finden Sie Module1. Im<br />
rechten Bereich steht unter<br />
Vorhandene Makros in Module1<br />
nur Main: Klicken Sie<br />
auf diesen Eintrag <strong>und</strong> dann<br />
auf Bearbeiten.<br />
Der Dialog verschwindet, <strong>und</strong><br />
stattdessen erscheint ein Editorfenster,<br />
in dem Sie programmieren<br />
können (Abbildung 2). Zunächst<br />
stehen dort nur ein Kommentar <strong>und</strong> eine<br />
leere Prozedur namens Main.<br />
Wechseln Sie in dieses Fenster <strong>und</strong> springen<br />
Sie im rechten Editorbereich ans<br />
Ende. Fügen Sie dort eine Leerzeile <strong>und</strong><br />
dann den Code aus Listing 1 ein. Das ist<br />
noch nicht die Lösung, sondern ein Teil<br />
des Wegs dorthin: Wenn Sie nun in die<br />
Tabelle zurück wechseln <strong>und</strong> in eine freie<br />
Zelle die Formel<br />
=MeinWert(A1:A5)<br />
eingeben, erscheint darin ein Text, der<br />
aus den fünf Zellinhalten (von A1 bis A5)<br />
besteht; die Werte sind darin durch Leerzeichen<br />
voneinander getrennt. Der Sinn<br />
dieses ersten Listings ist, dass Sie erkennen,<br />
wie Sie auf die Zellen zugreifen können,<br />
die Sie über die Formel =MeinWert<br />
(A1:A5) an die Funktion übergeben.<br />
Da die BASIC-Funktion nicht wissen<br />
kann, wie viele Zellen zu bearbeiten<br />
sind, nutzt sie die Funktionen LBo<strong>und</strong><br />
(Lower Bo<strong>und</strong>) <strong>und</strong> UBo<strong>und</strong> (Upper<br />
Bo<strong>und</strong>), die für einen rechteckigen Bereich<br />
jeweils den kleinsten <strong>und</strong> größten<br />
Zeilen- oder Spalten-Index zurück geben:<br />
Wenn das zweite Argument 1 ist,<br />
geht es um Zeilen, falls es 2 ist, arbeitet<br />
es mit Spalten.<br />
Damit die Funktion alle Zelleninhalte<br />
auswerten kann, verwendet sie eine geschachtelte<br />
Schleife: Die äußere Schleife<br />
läuft über alle Zeilennummern, die innere<br />
über alle Spaltennummern, <strong>und</strong> der<br />
Zugriff auf die Zellen ist dann über<br />
Zellen (Zeile, Spalte) möglich – Zellen<br />
hat die MeinWert-Funktion als Argument<br />
erhalten.<br />
Wichtig ist hier zu verstehen, dass Sie<br />
zwar in der Tabelle die Formel =Mein<br />
Wert(A1:A5) verwenden können, dass<br />
aber A1:A5 nicht das Argument ist, das<br />
Abb. 1: Aus Calc heraus rufen Sie die Verwaltung der Makros<br />
auf. Über „Bearbeiten“ aktivieren Sie den Editor.<br />
die Funktion erhält. Auf dem Weg von der<br />
Tabelle in die Funktion wird A1:A5 in ein<br />
zweidimensionales Array umgewandelt,<br />
dessen Elemente die Funktion über die Indizes<br />
(Zeile, Spalte) anspricht.<br />
BASIC-Funktionen in LibreOffice geben<br />
einen Wert immer durch eine Zuweisung<br />
zurück, im Beispiel MeinWert = Ausgabe.<br />
Was wie das Setzen einer Variable aussieht,<br />
ist tatsächlich die Festlegung des<br />
Rückgabewerts; Sie erkennen das nur daran,<br />
dass hier der Name der Funktion verwendet<br />
wird.<br />
Maximum <strong>und</strong> Minimum<br />
Zurück zur Aufgabenstellung:<br />
Das Ziel war, in der Tabelle anstelle<br />
von<br />
=(MAX(A1:A5)+MIN(A1:A5)) / 2<br />
die Formel<br />
=MeinWert(A1:A5)<br />
verwenden zu können. In Listing<br />
1 sind im Prinzip schon<br />
die wichtigsten Features enthalten,<br />
um das zu erreichen<br />
– nämlich der Zugriff auf alle<br />
Zellen. Auf den ersten Blick<br />
könnte man hoffen, dass die<br />
Aufgabe viel leichter ist:<br />
Wenn Sie in die MeinWert-<br />
Funktion nur MeinWert =<br />
(Max(Zellen)+Min(Zellen))/<br />
2 schreiben, funktioniert das<br />
nicht: Es gibt im BASIC keine<br />
Max- <strong>und</strong> Min-Funktionen,<br />
also müssen wir deren Funktionalität<br />
nachbauen.<br />
Die Lösung der Aufgabe sehen<br />
Sie in Listing 2. Das Kernstück bildet auch<br />
hier die geschachtelte Schleife, die Sie<br />
schon aus Listing 1 kennen. Innerhalb der<br />
Schleife berechnet die Funktion nun das<br />
Maximum <strong>und</strong> das Minimum. Das funktioniert<br />
so:<br />
l Vor der Schleife ermittelt die Funktion<br />
die Indizes der ersten betroffenen Zelle<br />
<strong>und</strong> speichert diese in den Variablen<br />
StartX <strong>und</strong> StartY.<br />
l Über Zellen (StartX, StartY) liest sie<br />
den Wert in der ersten Zelle aus <strong>und</strong><br />
Listing 1<br />
Function MeinWert (Zellen)<br />
Ausgabe = ""<br />
For Zeile = LBo<strong>und</strong>(Zellen, 1) To UBo<strong>und</strong>(Zellen, 1)<br />
For Spalte = LBo<strong>und</strong>(Zellen, 2) To UBo<strong>und</strong>(Zellen, 2)<br />
Ausgabe = Ausgabe + Str( Zellen(Zeile, Spalte) )<br />
Next<br />
Next<br />
MeinWert = Ausgabe<br />
End Function<br />
Abb. 2: Im Editor können Sie Funktionen <strong>und</strong> Prozeduren eingeben, die Sie dann in<br />
Calc-Tabellen zusammen mit den Standardfunktionen von Calc nutzen.<br />
<strong>EasyLinux</strong><br />
03/2013<br />
www.easylinux.de<br />
45