Home / LinuxUser / 2008 / 03 / Automatikgetriebe

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

War doch klar...
(241 Punkte bei 17 Stimmen)
Re: War doch klar...
(178 Punkte bei 7 Stimmen)
Re: Skype für 64-Bit-Prozessor u. Suse 12.1
(161 Punkte bei 4 Stimmen)
Kubuntu verliert Finanzierung
(130 Punkte bei 4 Stimmen)
Offen fürs Geschäft
(80 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

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.

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.

Listing 7
' 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).

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).

Abbildung 7: Die fertige Tabelle informiert über jede installierte Schriftart.

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).

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].

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 59 Punkte (7 Stimmen)

Schlecht Gut

Infos zum Autor

Tim Schürmann

Tim Schürmann

Tim Schürmann ist Diplom-Informatiker und derzeit als freier Autor unterwegs. Mehr Informationen finden Sie auf seiner Homepage unter www.tim-schuermann.de.


Infos zur Publikation

Infos zur Publikation

LinuxUser 03/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Duden Korrektor unter 64-Bit
Duden Korrektor unter 64-Bit
Tim Schürmann, 06.02.2012 10:36, 0 Kommentare

Der Duden Korrektor bietet eine äußerst nützliche Rechtschreib- und Grammatikkorrektur für LibreOffice und bringt in der aktuellen Version 8 e...

Aktuelle Fragen

Ubuntu 11.10 Compiz 3D Cube flackern
Moritz Obenauer, 12.02.2012 12:25, 0 Antworten
Hallo! Ich habe Ubuntu 11.10 mit Unity und den Compiz 3D Cube ein gerichtet. Er funktioniert...
Suse 12.1 Bootvorgang bleibt seit Update stehen
Wimpy *, 12.02.2012 09:22, 3 Antworten
Seit Update auf Kernel 3.1.9-1.4-desktop i686 bleibt der Bootvorgang stehen. Es erscheint der gr...
N24 Stick (Huawei E173) und Ubuntu 11.04
Patrick Obenauer, 11.02.2012 11:54, 1 Antworten
Hallo zusammen! Ich benutze einen alten Laptop, der mit Ubuntu 11.04 flott und problemlos läuft....
Wie kann man beim Einsatz von Compiz die Fenster-Dekoration einstellen?
GoaSkin , 10.02.2012 20:12, 0 Antworten
Hallo, ich nutze Linux Mint mit dem Gnome-Derivat Mate. Da die Distribution Compiz nicht autom...
rndc reload zone - failed bad zone
Ludwig jun. B., 06.02.2012 16:08, 2 Antworten
Schönen guten Tag, ich habe folgendes Problem. Immer wenn ich folgendes Kommando ausführen bek...