1. Abstrakt
Die Tabellenkalkulation »OpenOffice Calc« bietet die Möglichkeit, eigene Funktionen zu definieren, die ebenso leicht wie die bereits fest eingebauten Funktionen verwendet werden können.
Dieses Dokument soll einen kurzen Abriss darüber geben, wie solche Funktionen definiert und verwendet werden können. Im Anhang finden sich einige Beispiele nützlicher Funktionen.
[Zurück zum Inhaltsverzeichnis]
2. Eigene Funktionen definieren
2.1. Wahl der Programmiersprache
In OpenOffice Calc stehen mehrere Skriptsprachen zur Verfügung, u.a. JavaScript, Python und BASIC. Am weitesten verbreitet ist wohl BASIC, weshalb dieses hier verwendet werden soll.
2.2. Speicherort festlegen
Eigene Funktionen gehören zu den Makros, und diese sind wiederum in Modulen organisiert. Ein einzelnes Modul kann bis zu 64kB Programmtext aufnehmen, aber es ist möglich, umfangreicheren Code durch Aufteilen in mehrere Funktionen über mehrere Module zu verteilen.
Die Module wiederum können entweder unter »Meine Makros« abgelegt werden, wo sie künftig allen OO-Dokumenten zur Verfügung stehen, oder sie werden spezifisch an ein bestimmtes Dokument gebunden.
Anm.: Nachdem für ein Dokument erstmalig ein Makro erstellt wurde, muss das Dokument geschlossen, neu geöffnet und die Frage nach der Makro-Aktivierung bejaht werden, bevor die eigenen Funktionen in diesem Dokument funktionieren.
Das Erstellen der Funktion (des Makros) geschieht unter »Extras → Makros → Makros verwalten«. In der sich dann öffnenden Maske kann der Speicherort ausgewählt und – falls nötig bzw. erwünscht – ein neues Modul angelegt werden. Durch Klick auf »Bearbeiten« gelangt man dann in den Makroeditor.
Anm.: Auf den Makroeditor selbst und die ihn umgebende IDE wird an dieser Stelle nicht weiter eingegangen, da das Prinzip anderen Entwicklungsumgebungen sehr ähnlich ist.
[Zurück zum Inhaltsverzeichnis]
2.3. Funktion erstellen
Nachdem der Makroeditor geöffnet ist, wird die Funktion wie aus herkömmlichen Programmiersprachen bekannt eingegeben. BASIC unterscheidet hier zwischen Prozeduren (»Sub«) und Funktionen (»Function«). Im Gegensatz zu Prozeduren können Funktionen einen Wert zurückgeben. Die Rückgabe erfolgt, indem der Wert dem Funktionsnamen zugewiesen wird. Beispiel:
Function APlusB( a as Integer, b as Integer ) APlusB = a + b End Function
[Zurück zum Inhaltsverzeichnis]
3. Eigene Funktionen aufrufen
Eine zuvor erstellte eigene Funktion wird in OpenOffice Calc aufgerufen wie eine bereits eingebaute, d.h. in das betreffende Feld wird z.B. =APlusB(2;3) eingetragen. Anstelle von Literalen können natürlich auch Zellenbezüge beim Aufruf der Funktion verwendet werden, also z.B.: =APlusB($A$1; B2)
Wichtig: Auch wenn die aufgerufene Funktion keine Parameter hat, muss beim Aufruf eine (leere) Klammer angegeben werden, weil Calc sonst nicht erkennt, dass es sich um einen Funktionsaufruf handelt, also z.B.: =meineFunktionOhneParameter()
[Zurück zum Inhaltsverzeichnis]
4. Anhang
4.1. summenTest
Diese Funktion verdeutlicht das Auswerten eines Zellbereichs als Aufrufparameter, also z.B.: =summenTest(A1:B5)
Function summenTest ( vArgument as Variant ) ' Ist das Argument ein Array (Zellbereich)? If Not IsArray( vArgument ) Then ' Ist der einzelne Wert numerisch? If IsNumeric( vArgument ) Then ' Rückgabewert ist gleich Eingabewert. summenTest = vArgument Else ' Summe ist gleich 0, wenn kein numerischer Wert ' übergeben wurde. summenTest = 0 End If ' Funktion beenden. Exit Function End If Dim nSumme as Long Dim i as Integer Dim j as Integer ' Der spätere Rückgabewert. nSumme = 0 ' Schleife durch erste Dimension (Zeilen). For i = 1 to UBound( vArgument, 1 ) ' Schleife durch zweite Dimension (Spalten). For j = 1 to UBound( vArgument, 2 ) ' Numerisch? If IsNumeric( vArgument( i, j ) ) Then ' Wert dazuzählen. nSumme = nSumme + vArgument( i, j ) End If Next j Next i ' Rückagbewert in Zelle. summenTest = nSumme End Function
[Zurück zum Inhaltsverzeichnis]
4.2. Concat_Range
Diese Funktion fügt alle Zeichenketten innerhalb eines Zellenbereichs zu einem zusammen und kann zum Beispiel in Kombination mit der vordefinierten Funktion LÄNGE dazu verwendet werden, um die Anzahl der Zeichen innerhalb eines Zellbereichs zu zählen: =LÄNGE(CONCAT_RANGE(A1:B5))
Function Concat_Range ( vArgument as Variant ) ' Ist das Argument ein Array (Zellbereich)? If Not IsArray(vArgument) Then ' Rückgabewert ist gleich Eingabewert Concat_Range = vArgument ' Funktion beenden. Exit Function End If Dim rVal as String Dim i as Integer Dim j as Integer ' Der spätere Rückgabewert. rVal = "" ' Schleife durch erste Dimension (Zeilen). For i = 1 to UBound( vArgument, 1 ) ' Schleife durch zweite Dimension (Spalten). For j = 1 to UBound( vArgument, 2 ) ' Neuen String ans Ergebnis anhängen. rVal = rVal + vArgument( i, j ) Next j Next i ' Rückagbewert in Zelle. Concat_Range = rVal End Function