26.02.2014 Aufrufe

EasyLinux Programme und Skripte (Vorschau)

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!