Archiv des LibreOffice- und OpenOffice.org-Wiki

[ÜberSicht] [TitelIndex] [WortIndex] [SeiteFinden

(./) OOo 3.2

Eigene oder selbst definierte Funktionen sind Ergänzungen zu den eingebauten, vordefinierten Funktionen und Formeln, die in OOo/Libreoffice reichlich zur Verfügung stehen. Stößt man an deren Grenzen, sollte man wissen, wie einfach man eigene Funktionen definieren und einfügen kann.

1. Funktionsaufruf

Der Aufruf eigener Funktionen in calc unterscheidet sich nicht von anderen Funktionsaufrufen: Man schreibt in die Zelle =Funktionsname(Parameter; Parameter). Groß-Klein-Schreibung des Namens wird in Basic nicht unterschieden. Falls mehrere Parameter in der Klammer übergeben werden, werden sie (nur in der Tabelle) durch ; voneinander getrennt. Funktionsaufruf mit Parametern mit Zellenbezug Beachte: In der Funktionsdefinition in Basic trennt ein Komma die Parameter!

Fehlermeldung, weil Funktion noch nicht definiert ist Solange die Funktion nicht definiert oder falsch geschrieben ist oder nicht gedeutet werden kann, erhält man in der Tabelle nach Abschluss des Eintrags eine Fehlermeldung.

Bei korrekt definierter Funktion (siehe unten) sieht man das gewünschte Resultat in der Tabelle erst nach erneutem Aufruf der gesicherten Datei und sofern man die Frage nach Makroaktivierung bejahte. Danach wird das Funktionsresultat bei Änderung in den Bezugsfeldern stets sofort erneuert.

2. Editieren einer Funktion

Am einfachsten schreibt man eine eigene Funktion direkt im OOo-Makro-Editor in OOo-Basic, wo man sie auch vielfältig testen kann. (Alternativ können auch Python oder JavaScript als Sprache genutzt werden.) Den Makro-Editor öffnet man über Extras->Makros->Makros verwalten->OpenOffice Basic... (sofern man die Funktion mit Basic formulieren will). Zu diesem Zeitpunkt muss man sich entscheiden, wo man das neue Funktionsmakro verankern will, ob man es allgemein, nur für sich selbst oder nur in dem vorliegenden Dokument nutzen will. Änderungen sind später immer noch möglich. Für einen ersten Test verankert man es zweckmäßigerweise in einem eigenen (gleichnamigen) Bibliotheksmodul am vorliegenden Dokument.

Beim Neuaufruf werden vom Makro-Editor einige Zeilen automatisch erzeugt, die notfalls entbehrlich sind. Die eigentliche Funktion formuliert man nach „Ende Sub“ und leitet sie mit „Function“ mit dem Funktionsnamen ein, an den sich in Klammern die internen Namen der Parameter und ihr Typ, bei mehreren Parametern getrennt duch Komma anschließt. Nach der schließenden Parameterklammer folgt der Typ des Ausgabewertes. Die folgenden Zeilen beinhalten die in Basic formulierte Funktion. Beendet wird das Ganze mit „End Function“.

Natürlich können auch mehrere Funktionen gemeinsam in einem Modul untergebracht werden.

3. Testen einer eigenen Funktion im Makroeditor

Zum Testen einer eigenen Funktion innerhalb des Editors muss man selbige mit den notwendigen Parametern im der Funktion vorgeschalten Makro (zwischen Sub und End Sub) aufrufen, die Ausgabe programmiert man mit einer „print“-Zeile. Der Test beginnt dann mittels „BASIC-Programm ausführen“ (zweites Icon von links) oder „Prozedurschritt“ (4. icon von links). Hat man durch Editieren der Parameter in der Subroutine und wiederholten Aufruf die Funktion ausgiebig positiv getestet, kann man das vorgeschaltete Aufrufmakro unbeschadet belassen, denn es wird beim Aufruf der Funktion aus der Tabelle nicht wahrgenommen.

Beispiel einer eigenen Funktion:

REM  *****  BASIC  *****
Sub aufruf_KOMBNAME
xstring = "Erno"
ystring = "Meier-Müller II."
retcode=KOMBNAME(xstring,ystring)
Msgbox retcode
End Sub
 
Function KOMBNAME(astring as string,bstring as string) as string
if astring = EMPTY then
        print "Vorname fehlt"
endif
if len(astring) = 1 then
        print "Abkürzungspunkt fehlt. Füge eigenmächtig einen Punkt an."
        astring = astring+"."
endif
if len(astring) > 1 then
        for i=1 to len(astring)
                l = mid(astring,i,1) 
                if l < "A" and l <> "." and l <> "-" and l <> " " then
                        print astring+" ist kein Vorname, Änderung nötig!"
                        KOMBNAME = EMPTY
                        exit function
                end if
        next
endif
if len(bstring) = EMPTY then
        print "Familienname fehlt"
        exit function
endif   
if len(bstring) = 1 then
        print "Abkürzungspunkt fehlt. Füge eigenmächtig einen Punkt an."
        bstring = bstring+"."
endif
if len(bstring) > 1 then
        for i=1 to len(bstring)
                l = mid(bstring,i,1)
                if l < "A" and l <> "." and l <> "-" and l <> " " then
                        print bstring+" ist kein Familienname, Änderung nötig!"
                        KOMBNAME = EMPTY
                        exit function
                end if
        next
endif
if len(astring) > 1 then
        KOMBNAME = astring+" "+bstring
        else
                KOMBNAME = bstring
end if
End Function

Das Resultat der beschriebenen Funktion in Spalte C: Das Resultat der beschriebenen Funktion in Spalte C


KategorieCalc KategorieHowto


LizenzBedingungen | AnbieterKennzeichnung | DatenschutzErklärung | Stand: 2013-04-28