Automatikgetriebe
Einstieg in die Makroprogrammierung
Hoch und runter
Ein Calc-Dokument besteht aus mehreren Tabellenblättern, die sich wiederum aus Zeilen und Spalten aufbauen. Um an eine einzelne Zelle zu gelangen, benötigen Sie zunächst Zugriff auf eine der Tabellen. Den erhält man entweder über die Angabe ihrer Position oder ihres Namens:
oTabelle = oCalcDokument.Sheets.getByIndex(0)
oTabelle = oCalcDokument.Sheets.getByName("Tabelle1")
Sobald Sie eine Tabelle etwa in der Variablen oTabelle liegen haben, greifen Sie über oTabelle.Rows und oTabelle.Columns auf die Zeilen und Spalten zu und manipulieren sie beliebig. Eine Reihe von Beispielen dazu liefert Listing 6.
' Einfügen einer neuen Zeile am oberen Rand der Tabelle
oTabelle.Rows.insertByIndex(0,2)
' Einfügen einer neuen Spalte
oTabelle.Columns.insertByIndex(1,4)
' Löschen von Zeilen und Spalten
oTabelle.Rows.removeByIndex(0,2)
oTabelle.Columns.removeByIndex(1,4)
' Zugriff auf eine einzelne Zeile
oZeile=oTabelle.Rows.getByIndex(2)
' Zugriff auf eine Spalte per Namen
oSpalte=oTabelle.Columns.getByName("B")
' Breite einer Spalte in hunderstel Millimeter
nBreite=oSpalte.Width
' Breite einer Spalte ändern
oSpalte.With=400
' optimale Spaltenbreite erzwingen
oSpalte.OptimalWidth = True
Sinngemäß das Gleiche gilt für einzelne Zellen in der Tabelle. An eine einzelne Zelle gelangen Sie durch simples Abzählen:
oZelle=oTabelle.getCellByPosition(1,3)
Dieser Befehl liefert die Zelle in der zweiten Spalte und vierten Zeile – Sie haben also ab sofort über oZelle Zugriff auf die Zelle namens B4. (Beachten Sie, dass Basic im Array bei 0 zu zählen beginnt.) Alternativ greifen Sie auch direkt über den Namen zugreifen. Den Code dazu sowie für weitere Manipulation von Zellen fasst Listing 7 zusammen.
' Zellenzugriff über den Namen
oZelle=oSheet.getCellRangeByName("B4")
' Numerischen Wert zuweisen
oZelle.Value=13.45
' Text zuweisen
oZelle.String="MeinText"
' Formel eintragen
oZelle.FormulaLocal = "=Jetzt()"
Mit diesem Wissen lesen Sie nun die Informationen über die Schriften aus und legen sie in einer Tabelle ab. Jede Zeile nimmt dabei die Informationen einer Schriftart auf, beginnend mit der Zeile 0. Dazu lassen Sie das Makro nacheinander alle Schriftarten durchlaufen (Listing 8).
For i = 0 to Ubound(oFonts) ' Information zur aktuellen Schrift abrufen … oSchriftInfo = oFonts(i) ' … und in einer Zeile ablegen oZelle=oTabelle.getCellByPosition(i, 0) oZelle.String=oSchriftInfo.Name oZelle=oTabelle.getCellByPosition(i, 1) oZelle.String=oSchriftInfo.StyleName oZelle=oTabelle.getCellByPosition(i, 2) Next
Fallweise
Als nächstes nehmen Sie sich den Namen der Schriftfamilie aus oSchriftInfo.Family vor. Der liegt zunächst einmal nur als Zahl vor. Die Tabelle "Schriftfamilien" listet deren Bedeutung auf.
Schriftfamilien
| Nummer | Schriftfamilie |
|---|---|
| 0 | DONTKNOW |
| 1 | DECORATIVE |
| 2 | MODERN |
| 3 | ROMAN |
| 4 | SCRIPT |
| 5 | SWISS |
| 6 | SYSTEM |
Um die wenig aussagekräftigen Zahlen durch sprechende Begriffe zu ersetzen, könnten Sie eine verschachtelte Wenn-Dann-Sonst-Abfrage erstellen, um alle Möglichkeiten durchzutesten:
If oSchriftInfo.Family = 0 Then
oZelle.String="Unbekannt"
Else
If oSchriftInfo.Family = 1 Then
oZelle.String="Dekorativ"
Else
' und so weiter
End If
End If
Eine solche Abfrage ist aber extrem unübersichtlich und enorm fehlerträchtig. Glücklicherweise kennt Basic für solche Fälle die Select Case-Abfrage:
Select Case oSchriftInfo.Family
Case 0:
oZelle.String="Unbekannt"
Case 1:
oZelle.String="Dekorativ"
Case 2:
' und so weiter
End Select
Dieser Codeschnippsel testet, mit welchem Wert hinter Case der Inhalt aus SchriftInfo.Family übereinstimmt und übergibt den dazu passenden Wert an die Variable oZelle.String. Damit wären alle wichtigen Daten über die Schriftart in jeder Zeile untergebracht (Abbildung 7).
Um Ihren Code brauchen Sie sich nicht zu sorgen; OpenOffice speichert automatisch, was Sie im Basic-Editor eintragen. Das gilt freilich nicht für die Dokumente, die Sie über das Makro erstellen. Daher müssen Sie diese zum Abschluss speichern. Auch das erledigen Sie wieder über das Makro (Listing 9).
' erzeugte Dokumente speichern sDatei="/home/tim/schriftproben.odt" sURL=ConvertToURL(sDatei) oDokument.storeToURL(sURL, Array()) sDatei="/home/tim/schrifteninfo.ods" sURL=ConvertToURL(sDatei) oCalcDokument.storeToURL(sURL, Array())
Damit ist die Funktion zum Erzeugen einer Font-Übersicht komplett. Wie bereits erwähnt, finden Sie das komplette Makro auf der Heft-DVD sowie auf unserer Webseite [1].



