Aus Linux-Magazin 03/2006

Tcluno und Itcluno: Tcl-Erweiterungen, um Open Office zuautomatisieren

Open Office bringt mit seinem Basic-Dialekt eine mächtige Makrosprache mit. Die ist aber nicht jedermanns Sache – wer lieber Tcl verwendet, kann das tun und Office damit fernsteuern. Zusammen mit Tcluno und Itcluno gelingen druckreife Reports oder Tabellen, deren Daten aus beliebigen Quellen stammen.

Für viele Anwender gehören Textverarbeitung und Tabellenkalkulation zu den wichtigsten Desktop-Programmen. Zu deren Aufgabengebiet gehört es auch, Dokumente automatisch zu erzeugen oder programmgesteuert Teile zu überarbeiten. Hier wäre es praktisch, statt des eingebauten Basic bei der gewohnten Skriptsprache zu bleiben.

Office aus der Ferne

Dank Arnulf Wiedman und Wolfgang Großer klappt dies auch: Ihre Tcl-Erweiterung Tcluno [1] gibt Skripten Zugriff auf den vollen Funktionsumfang von Open Office, um zum Beispiel Dokumente zu erstellen oder ihren Inhalt zu ändern. Das mächtige Uno-Komponentenmodell (siehe Kasten “Universal Network Objects”) bringt die notwendige Unterstützung mit, um Open Office von anderen Programmen aus fernzusteuern. Das Ergebnis ist ein Open-Office-Dokument, bei Bedarf auch exportiert nach Winword, Excel und PDF oder ausgedruckt.

Universal Network Objects

Als die Hamburger Star Division in den 90er Jahren die ersten Versionen von Star Office entwickelte, war die Programmiersprache der Wahl C++. Damals fehlte aber ein plattformübergreifendes Komponentenmodell, um die komplexe Anwendung in überschaubare Teile zu zerlegen. In Anlehnung an Ideen aus Microsofts OLE (Object Linking and Embedding) und OMG Corba (Object Management Group, Common Object Request Broker, [4]) entwickelte Star Division ihr Uno-Komponentenmodell. Der Name steht für Universal Network Objects.

Interface-Beschreibung

Ähnlich wie bei Corba nutzt Uno eine eigene Sprache, um die Methoden und Eigenschaften der verfügbaren Klassen zu beschreiben. Vergleichbar zu OLE unterstützen die Objekte gleichzeitig mehrere Schnittstellen, die ein Client zur Laufzeit abfragt und sich für eine entscheidet. Zum Beispiel kennt die Implementation für ein Blatt in der Tabellenkalkulation (Abbildung 1) mehrere Schnittstellen, die ein Java-Programm wie folgt abfragen würde:

XStorable xStorable = (XStorable)UnoRuntime.queryInterface(XStorable.class, spreadsheet);
xStorable.storeAsUrl( ... );

XPrintable xPrintable = (XPrintable)UnoRuntime.queryInterface(XPrintable.class, spreadsheet);
xPrintable.print( ... );

Der Vorteil des Komponentenmodells: Beim Implementieren kann der Entwickler frei entscheiden, über welche Schnittstellen ein neues Objekt verfügt. Das Prinzip ähnelt den Interfaces von Java. Im Gegensatz zu C++ verhindert es unübersichtliche Mehrfachvererbungen. Ändert sich die Implementation eines Objekts, bleibt das ohne Folgen für den restlichen Quelltext, da der nur die verfügbaren Schnittstellen, nicht jedoch das Objekt selber nutzt.

Gruppenbildung sorgt für Übersicht

Damit auch viele Schnittstellen überschaubar bleiben, lassen sie sich zu größeren Einheiten gruppieren, den so genannten Services. Zum Erzeugen eines Objekts genügt bei Uno kein einfacher Konstruktor, das Programm muss dies vielmehr bei einem Servicemanager (Factory) anfordern. Interessanterweise verwendet die französische Firma Dassault Systèmes ein fast identisches Framework in Catia V5. Leider ist die Linux-Version dieses CAD-Systems noch nicht erhältlich.

Wie das Wort Network in Uno andeutet, funktioniert der Zugriff auf die Komponenten-Interfaces auch übers Netzwerk. Das ist der einfachste Weg, um Open Office von fremden Programmiersprachen aus zu steuern. Wer selber Uno-Objekte schreiben möchte, muss hierfür derzeit C++ oder Java verwenden. Wer nur den bestehenden Funktionsumfang von Open Office nutzen will, kann auch weitere Sprachen wie Tcl, Python, Dotnet oder Open Office Basic verwenden.

Einblick zur Laufzeit

Besonders praktisch für Skriptsprachen: Per Introspektion können sie die verfügbaren Schnittstellen zur Laufzeit abfragen. Tcluno nutzt dies und fordert selbst die nötigen Interfaces an. Java- oder C++-Programmierer müssen sich selbst mit diesem Schritt plagen, bevor sie Methoden auf ein Objekt anwenden dürfen. Kennen Tcl-Programmierer die Schnittstellen einer Implementation, dann wenden sie diese ohne Umweg an.

Abbildung 1: Dank Uno sind Implementation und Schnittstelle getrennt, ein Objekt unterstützt meist mehrere Schnittstellen.

Abbildung 1: Dank Uno sind Implementation und Schnittstelle getrennt, ein Objekt unterstützt meist mehrere Schnittstellen.

Die Tcluno-Quellen sind auf Sourceforge [2] zu finden. Die Entwickler arbeiten recht rege an ihrem Projekt; während die ersten Versionen noch auf den C++-Bibliotheken von Open Office basierten, ist die aktuelle Version eine reine Skript-Erweiterung, die ohne Kompilieren auskommt. Es genügt daher auch, die Erweiterung an beliebiger Stelle auf dem Rechner abzulegen und den Tcl-Suchpfad entsprechend zu erweitern. Ein fertiges Paket mit den Beispielen aus diesem Artikel und einer erprobten Version der Erweiterung ist auf dem Linux-Magazin-FTP-Server zu finden [3].

Vernetzte Prozesse

Die Kommunikation zwischen Open Office und Tcluno findet über das Netzwerk statt, selbst wenn beide Prozesse auf derselben Maschine laufen. Open Office arbeitet dabei als Server. Das Programm muss gestartet sein, damit Tcl darauf zugreifen kann. Per Default startet Open Office leider ohne Netzwerkunterstützung. Ein Aufruf mit der »accept«-Optionen ändert dies:

ooffice "-accept=socket,host=localhost,port=2002;urp;"

Nur Clients (also Tcl-Skripte), die auf demselben Rechner laufen, erhalten bei diesen Einstellungen Zugriff auf Open Office. Wer diese Funktionalität häufiger braucht, kann die Netzwerkunterstützung auch dauerhaft in der Konfigurationsdatei eintragen. In »Setup.xcu« sind dazu im XML-Ast »node oor:name=”Office”« drei Zeilen zu ergänzen, in Listing 1 sind das die Zeilen 9 bis 11 mit einer »ooSetupConnectionURL«-Property.

Listing 1: Netzwerkunterstützung

01 <?xml version="1.0" encoding="UTF-8"?>
02 <oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Setup" oor:package="org.openoffice">
03  <node oor:name="L10N">
04   <prop oor:name="ooLocale" oor:type="xs:string">
05    <value>en-US</value>
06   </prop>
07  </node>
08  <node oor:name="Office">
09   <prop oor:name="ooSetupConnectionURL" oor:type="xs:string">
10     <value>socket,host=localhost,port=2002;urp</value>
11   </prop>
12   <prop oor:name="ooSetupInstCompleted" oor:type="xs:boolean">
13   [...]

Zugriff erlaubt

Je nach verwendeter Version, Distribution und Installation liegt die Konfigurationsdatei an unterschiedlichen Orten. Bei Open Office 2.0 findet sich die benutzerspezifische Konfigurationsdatei unter »~/.openoffice.org2/user/registry/data/org/openoffice/Setup.xcu«, die systemweite Konfigurationsdatei zum Beispiel unter »/usr/lib/ooo-2.0/share/registry/data/org/openoffice/Setup.xcu«. Bei der älteren Version 1.1 heißt das benutzerspezifische File »~/OpenOffice.org1.1/user/registry/data/org/openoffice/Setup.xcu«, das systemweite ist »/usr/lib/ooo-1.1/share/registry/data/org/openoffice/Setup.xcu«.

Für Tcl-Programmierer funktionieren die Open-Office-Objekte genau so wie von Tk oder Itcl gewohnt. Sie stehen in Tcl als Objekte bereit, die in den Schnittstellenbeschreibungen definierten Methoden übergibt das Skript in bester Tk-Tradition an das Objekt. Listing 2 nutzt ein paar der 2600 Klassen von Open Office, um ein Blatt der Tabellenkalkulation mit Daten zu füllen und im Excel-Format zu exportieren.

Listing 2: Tcluno

01 #!/usr/bin/tclsh
02 
03 lappend auto_path [file join [pwd] tclurtp]
04 lappend auto_path [file join [pwd] tcluno ]
05 
06 # Tcl-Only-Version von Tcluno anfordern
07 set ::argv "-urtp"
08 # Erweiterung laden
09 package require tcluno_scalc
10 
11 # Kontakt mit Open Office herstellen
12 if {[catch {::tcluno_soffice::initDesktop} desktop]} {
13     puts stderr "Verbindung mit Open Office fehlgeschlagen!"
14     puts stderr "Fehler war:"
15     puts stderr $desktop
16     puts stderr ""
17     puts stderr "Bitte Open Office mit Netzwerkunterstützung starten:"
18     puts stderr "ooffice "-accept=socket,host=localhost,port=2002;urp;""
19     exit 1
20 }
21 
22 # Schnittstellen anzeigen
23 puts "»desktop« hat folgende Schnittstellen:"
24 puts [join [$desktop getTypes] "n"]
25 puts "n»desktop« ist folgender Service:"
26 puts [$desktop getSupportedServiceNames]
27 
28 # leere Liste erstellen
29 set filterSequence [$desktop tcluno::createUnoSequence Any]
30 
31 # neues Dokument in Tabellenkalkulation
32 set spreadsheet [$desktop loadComponentFromURL 
33     "private:factory/scalc" "_blank" 0 $filterSequence]
34 
35 # erste Seite finden
36 set sheets [$spreadsheet getSheets]
37 set sheet [$sheets getByIndex 0]
38 puts "nDer Tabellenname lautet: [$sheet getName]"
39 $sheet setName "Zufallszahlen"
40 
41 # Tabelle mit Zufallszahlen füllen
42 for {set col 0} {$col < 10} {incr col} {
43     for {set row 0} {$row < 10} {incr row} {
44         set cell [$sheet getCellByPosition $col $row]
45         set value [expr {rand() * 100}]
46         $cell setValue $value
47     }
48 }
49 
50 # Zellenadresse
51 set cell [$sheet getCellRangeByName "A12"]
52 puts "nKomplette Adresse: [$cell getCellAddress]"
53 
54 # Formeln und Texte
55 set cell [$sheet getCellRangeByName "A12"]
56 $cell setFormula "Summe:"
57 set cell [$sheet getCellRangeByName "B12"]
58 $cell setFormula "=sum(B1:B10)"
59 set cell [$sheet getCellRangeByName "A13"]
60 $cell setFormula "Mittelwert:"
61 set cell [$sheet getCellRangeByName "B13"]
62 $cell setFormula "=median(B1:B10)"
63 
64 # Als Excel-Tabelle exportieren
65 set filterSequence [$::desktop tcluno::createUnoSequence Any]
66 set msExcelFilter [$::desktop tcluno::createUnoStructHelper 
67     com.sun.star.beans.PropertyValue 
68     {FilterName -1 {MS Excel 97} 0}]
69 $::desktop tcluno::appendUnoSequence $filterSequence $msExcelFilter
70 
71 $spreadsheet storeAsURL "file:[file normalize ~/test.xls]" $filterSequence

Die »lappend«-Anweisungen in den Zeilen 3 und 4 erweitern den Suchpfad von Tcl um die Installation von Tclurtp und Tcluno. Die Beispiele arbeiten mit der reinen Skriptlösung Tclurtp für die Kommunikation mit Open Office. In der aktuellen Version verwendet Tcluno die Tclurtp-Variante aber nur, wenn das Skript mit der Option »-urtp« läuft. Zeile 7 sorgt dafür, dass die Variable »::argv« den String immer enthält, egal was der Anwender in der Kommandozeile angegeben hat.

Anschließend beginnt der Code damit, die Erweiterung für die Tabellenkalkulation anzufordern. Mit »::tcluno_soffice::initDesktop« versucht Zeile 12 den Kontakt zu Open Office herzustellen. Schlägt dies fehl, geben die darauf folgenden »puts stderr«-Aufrufe eine ausführliche Fehlermeldung aus. Im Erfolgsfall enthält die Variable »desktop« das zentrale Startobjekt.

Zwar muss sich bei Tcluno der Programmierer nicht wie bei Java oder C++ darum kümmern, die gewünschte Objektreferenz für eine Methode erst abzufragen, bevor er sie verwenden darf. Dennoch sind solche Abfragen möglich und sinnvoll, um sich über die unterstützten Schnittstellen eines Objekts zu informieren. Die Zeilen 23 bis 26 machen es vor; das Ergebnis zeigt Abbildung 2a.

Abbildung 2a: Das Tcluno-Beispiel aus Listing 2 beginnt mit der Ausgabe aller Schnittstellen des Desktop-Objekts von Open Office. Über diesen Service öffnet das Tcl-Programm die Tabellenkalkulation.

Abbildung 2a: Das Tcluno-Beispiel aus Listing 2 beginnt mit der Ausgabe aller Schnittstellen des Desktop-Objekts von Open Office. Über diesen Service öffnet das Tcl-Programm die Tabellenkalkulation.

Uno-Datentypen

Die meisten Uno-Kommandos erwarten einfache Eingaben wie Strings, Zahlen oder Listen. Es gibt jedoch auch ein paar besondere Datentypen, für die Tcl kein Äquivalent kennt. Tcluno gleicht das mit einigen Hilfskommandos aus, etwa für die häufig verwendete Sequenz des Any-Typs (Zeile 29 in Listing 2). Dieser generische Platzhalter kann beliebige andere Datentypen aufnehmen.

Das Desktop-Objekt dient als Factory für Dokumente. Die »loadComponentFromURL«-Methode öffnet ein Dokument (Zeile 32). Der erste Parameter gibt dessen URL an. Für bereits existierende Dokument genügt hier die normale URL (zum Beispiel »file:/home/cz/test.odt«). Zusätzlich gibt es jedoch für jeden Dateityp eine besondere URL:

  • »private:factory/swriter«
  • »private:factory/scalc«
  • »private:factory/sdraw«
  • »private:factory/simpress«

Diese vier URLs erzeugen ein neues, leeres Dokument. Der zweite Parameter gibt an, in welchem Fenster das Dokument erscheint, »_blank« sorgt für ein neues Fenster. Die letzten beiden Argumente werden nicht weiter genutzt und sind Defaultwerte.

Das Ergebnis der Mühe ist ein neues Objekt, dessen Referenz in »$spreadsheet« landet; es handelt sich um ein Dokument der Tabellenkalkulation. Zeile 36 fordert die Liste aller Blätter dieses Dokuments an, Zeile 37 wählt daraus die erste Seite. Der Titel dieses Blatts lautet per Default »Tabelle1«; Zeile 39 ändert das zu »Zufallszahlen«.

Navigation im Dokument

Open Office kennt zwei Techniken, um die Zellen eines Blatts zu adressieren: wie in Zeile 44 zu sehen über »getCellByPosition« mit dem Spalten- und Zeilenindex als Nummer oder über (Zeile 51) »getCellRangeByName« und die übliche Buchstaben-Zahlenkombination. Zu beachten ist: Der Index für »getCellByPosition« beginnt bei 0, die erste Zeile in »getCellRangeByName« trägt die Nummer 1.

Mit der Methode »setValue« setzt das Programm in Zeile 46 Zahlenwerte in die Zellen ein. Neben numerischen Werten können Zellen auch Formeln oder Texte enthalten, beides geschieht mit »setFormula«, wie in Zeile 56 (Text) und 58 (Formel) zu sehen ist. Bei Formeln ist allerdings darauf zu achten, dass sie in der englischen Form vorliegen müssen, also »=median(A1:A2)« (Zeile 62) und nicht die eingedeutschte Entsprechung »=mittelwert(A1:A2)«. Letztere ist nur per GUI erlaubt.

Um das fertige Dokument (siehe Abbildung 2b) zu speichern, muss sich das Programm zwischen den von Open Office unterstützten Formaten entscheiden: Excel, Star Calc oder CSV (Comma Separated Values). Für solche Konfigurationen kommt meist eine Any-Sequenz zum Einsatz. Zeile 65 erzeugt eine leere Liste des generischen Typs.

Abbildung 2b: Das Tcl-Skript hat die erste Tabelle umbenannt, mit Zufallszahlen gefüllt und eine Berechnung für Summe und Mittelwert eingefügt.

Abbildung 2b: Das Tcl-Skript hat die erste Tabelle umbenannt, mit Zufallszahlen gefüllt und eine Berechnung für Summe und Mittelwert eingefügt.

Um als Excel zu speichern, muss die Liste eine Struktur vom Typ »com.sun.star.beans.PropertyValue« enthalten. Dafür ist bei Tcluno die Hilfsfunktion »createUnoStructHelper« zuständig (Zeilen 66 bis 68), die als Parameter den Namen und Inhalt der Struktur erwartet. Die Funktion »appendUnoSequence« fügt in Zeile 69 die neue Struktur in die leere Sequenz ein. Zeile 71 nutzt dies, um das neue Dokument unter dem Namen »test.xls« im Homeverzeichnis speichern.

Bequemer

Noch besser an die objektorientierte Komponentenwelt von Open Office angepasst als Tcluno ist Itcluno. Es nimmt dem Programmierer viel Kleinarbeit ab. Wie der Name bereits andeutet, basiert Itcluno auf der objektorientierten Tcl-Erweiterung Itcl [5], sie braucht aber zusätzlich die Tclvfs-Erweiterung (Virtual File System, [6]). Beide fehlen in vielen Tcl-Distributionen. Dann führt ein einfacher Weg über Active Tcl von Activestate [7] zum Ziel.

Bei Itcluno setzt ein Programm die Uno-Objekte nicht wie in Listing 2 direkt ein, sondern indirekt über einen Satz einfach zu verwendender Itcl-Klassen. Diese fungieren als höherwertige Schicht, die die Open-Office-Objekte kapselt. Damit kommt ein Skript mit weniger Befehlen zum Ziel. Das Beispiel in Listing 3 erzeugt mit Itcluno ein neues Dokument, füllt es mit Gezeiten-Messwerten und generiert daraus eine Grafik.

Listing 3: Itcluno

01 #!/usr/bin/tclsh
02 
03 lappend auto_path [file join [pwd] tclurtp]
04 lappend auto_path [file join [pwd] tcluno ]
05 lappend auto_path [file join [pwd] itcluno]
06 
07 # Tcl-Only-Version von Tcluno anfordern
08 set ::argv "-urtp"
09 # Erweiterung laden
10 package require itcluno
11 
12 # Dokument erzeugen
13 set spreadsheet [::itcluno::SpreadSheet #auto]
14 $spreadsheet renameSheet Tabelle1 Werte
15 
16 # Werte Setzen
17 $spreadsheet setCellValue Werte [list 0 0] 
18     {{"" Tag Uhrzeit Wochentag Wasserstand}}
19 
20 # Wasserstand Schleuse Harburg
21 # Quelle: http://www.bsh.de/de/Meeresdaten/Vorhersagen/Gezeiten/
22 set daten [list 
23     [list HW 01.01.2006 05:05 So  2.4 ] 
24     [list NW 01.01.2006 12:38 So -1.5 ] 
25     [list HW 01.01.2006 17:40 So  2.3 ] 
26     [list HW 02.01.2006 00:53 Mo -1.4 ] 
27     [list HW 02.01.2006 05:55 Mo  2.5 ] 
28     [list NW 02.01.2006 13:32 Mo -1.5 ] 
29     [list HW 02.01.2006 18:33 Mo  2.3 ] 
30     [list NW 03.01.2006 01:44 Di -1.4 ] 
31     [list HW 03.01.2006 06:44 Di  2.5 ] 
32     [list NW 03.01.2006 14:26 Di -1.5 ] 
33     [list HW 03.01.2006 19:24 Di  2.2 ] 
34     [list NW 04.01.2006 02:30 Mi -1.4 ] 
35     [list HW 04.01.2006 07:30 Mi  2.5 ] 
36     [list NW 04.01.2006 15:13 Mi -1.6 ] 
37     [list HW 04.01.2006 20:09 Mi  2.1 ] 
38     [list NW 05.01.2006 03:12 Do -1.5 ] 
39     [list HW 05.01.2006 08:14 Do  2.5 ] 
40     [list NW 05.01.2006 15:58 Do -1.6 ] 
41     [list HW 05.01.2006 20:54 Do  2.0 ] 
42     [list NW 06.01.2006 03:55 Fr -1.5 ] 
43     [list HW 06.01.2006 09:01 Fr  2.5 ] 
44     [list NW 06.01.2006 16:43 Fr -1.5 ] 
45     [list HW 06.01.2006 21:42 Fr  2.0 ] 
46     [list NW 07.01.2006 04:44 Sa -1.4 ] 
47     [list HW 07.01.2006 09:52 Sa  2.4 ] 
48     [list NW 07.01.2006 17:32 Sa -1.5 ] 
49     [list HW 07.01.2006 22:32 Sa  1.9 ]]
50 $spreadsheet setCellValue Werte [list 0 1] $daten
51 
52 # Grafik erzeugen
53 $spreadsheet createChart Werte 
54     [list 12 1 12 12 cm] 
55     [list hasRowHeader 1 hasColumnHeader 1 
56         title "Harburg Schleuse" 
57         type LineDiagram] 
58     Werte [list 3 1 4 28]
59 
60 tcluno_soffice::windowTitle 
61     [$spreadsheet cget -desktop] 
62     "Wasserstand: Harburg Schleuse"
63 
64 $spreadsheet exportToPdf wasserstand.pdf

Spreadsheet-Klasse

Für die Tabellenkalkulation ist die »SpreadSheet«-Klasse zuständig. Deren ungefähr 30 Methoden erledigen fast alles rund um Tabellenkalkulationen. Schon mit dem Konstruktor in Zeile 13 ist die Kontaktaufnahme mit Open Office erledigt und ein neues Dokument erzeugt. Zeile 14 gibt der Tabelle einen neuen Namen, Zeile 17 setzt mit »setCellValue« die ersten Werte in die Tabelle. Die Syntax dazu lautet:

$spreadsheet setCellValue Tabellenname {Startspalte Startzeile} {{Wert11 Wert12} {Wert21 Wert22}}

Die Werte in der geschachtelten Liste dürfen Zahlen, Texte oder Formeln sein. Auf die Spaltenüberschriften folgen die Nutzdaten, die diesmal vom Bundesamt für Seeschifffahrt und Hydrographie stammen [8]. Zeile 23 bis 49 enthalten direkt die Werte; ein Skript könnte aber auch die aktuellen Daten von der Webseite abfragt. Zeile 50 fügt diesen Datenblock in Open Office ein.

Diagramme zeichnen

Für besseren Überblick sorgt eine Grafik mit dem Wasserstandsverlauf: Die Zeilen 53 bis 58 erzeugen das passende Liniendiagramm (Abbildung 3). Zum Schluss setzt Zeile 60 noch den Titel und Zeile 64 exportiert das Dokument als PDF. Das Ganze hat dank Itcluno nur noch sieben Kommandos gekostet (Zeile 13, 14, 17, 50, 53, 60 und 64). Mit zu Itcluno gehört auch eine umfangreiche Sammlung an nützlichen Beispielen, von einfachen Formatierungsaufgaben bis hin zur umfangreichen Pivot-Tabelle.

Abbildung 3: Für diese Tabelle genügen sieben Itcluno-Anweisungen. Das Programm in Listing 3 legt ein Spreadsheet an, füllt es mit Gezeiten-Messwerten der Schleuse Harburg und erzeugt ein Liniendiagramm.

Abbildung 3: Für diese Tabelle genügen sieben Itcluno-Anweisungen. Das Programm in Listing 3 legt ein Spreadsheet an, füllt es mit Gezeiten-Messwerten der Schleuse Harburg und erzeugt ein Liniendiagramm.

Mit Tcluno steht Tcl-Skripten das komplette Open-Office-API zur Verfügung. Entwickler erstellen damit Dokumente und bearbeiten deren Inhalt, ohne dass sie eine neue Sprache lernen. Die Beispiele in diesem Artikel betreffen zwar nur die Tabellenkalkulation, aber sowohl Tcluno als auch Itcluno umfassen außerdem Textverarbeitung, Bildbearbeitung und Präsentationen.

Bei vielen Aufgaben führt Itcluno schneller zum Erfolg, denn es deckt die wesentlichen Möglichkeiten bei geringem Lernaufwand ab. Der Einstieg für Tcluno kann dagegen recht steinig sein, da das Open-Office-API mit seinen gut 2600 Klassen und etwa 6000 Methoden schwer zu durchschauen ist. Zwar genügen meist weniger als 20 Klassen, aber auch der Umgang damit will erst mal gelernt sein.

Das Neueste

Die Kombination aus Datenbank und Tcl taugt offenbar bestens für schnell entwickelte Applikationen. Wie als Beleg für diese These gibt es kaum eine Datenbank ohne Tcl-Erweiterung, bei einigen dient Tcl sogar als Testwerkzeug in der Entwicklung. Nun hat Jerry LeVan die neue Version 1.6 seines Pgbrowse [10] herausgegeben. Dabei handelt es sich um einen recht leistungsfähigen Datenbankbrowser für PostgreSQL. Die Tile-Erweiterung sorgt für besser aussehende Tk-Anwendungen, allerdings steht ihr Funktionsumfang noch hinter dem von Tk zurück. Für einen sanften Übergang integrieren die Entwickler derzeit Tile schrittweise in das normale Tk. Das neue Misch-Toolkit trägt den Namen Ttk [11].

Die neue Version 3.6.0b3 des Tcl-Frameworks für Webanwendungen (Websh, [12]) bringt Bugfixes und ist nun kompatibel zu Apache 1.3 und 2.0 sowie Tcl 8.4 und 8.5.

Neugierige Blicke

Gilt es, bei Kunden oder auf anderen fremden Rechnern ganz schnell ein Problem zu lösen, sind oft nur die Korn-Shell oder gar »cmd.exe« verfügbar. Keine gute Grundlage, um in sinnvoller Zeit kleinere und größere Probleme zu beheben. Hier kommen die Tclkits [13] zu Hilfe, denn sie enthalten in einer einzigen Datei den kompletten Tcl-Interpreter und benötigen keinerlei Root-Rechte. In Kombination mit der von Jeffrey Hobbs entwickelten TK-Console [14] ergibt sie in Sekundenschnelle eine praktische Entwicklungsumgebung. Das geht nicht nur unter Linux-X86, sondern auch auf weniger gut ausgestatteten Plattformen wie Linux-S390, HP-UX, Solaris oder OSF-Alpha.

Manchmal fehlt im Werkzeugkasten noch ein Tool, das beliebige TCP/IP-Kommunikation von Browser oder Telnet überwacht. Bei der Suche nach versteckten Fehlern ist so ein Sniffer unverzichtbar. Sockspy (Abbildung 4 und [15]) bietet genau dies und passt problemlos auf einen USB-Stick mit Tools für Notfälle. Der mitgeschnittene Transfer lässt sich bequem durchsuchen und auch als Hex-Dump darstellen. Sockspy bietet zwar bei weitem nicht den Umfang des ungeschlagenen Platzhirschen Ethereal, braucht dafür aber keine Root-Rechte.

Abbildung 4: Sockspy schiebt sich zwischen Client und Server, um den TCP/IP-Transfer abzuhören und den übertragenen Inhalt in chronologischer Reihenfolge darzustellen.

Abbildung 4: Sockspy schiebt sich zwischen Client und Server, um den TCP/IP-Transfer abzuhören und den übertragenen Inhalt in chronologischer Reihenfolge darzustellen.

Dokumentation

Für einen guten Einstieg sorgt die Dokumentation zu Open Office. Sie ist online zu finden und im Open-Office-SDK [9] enthalten. Neben den einleitenden Abschnitten lohnt die Lektüre der Kapitel 7 bis 10, die mit vielen Beispielen die Handhabung der unterschiedlichen Dokumententypen vorstellen. Die Beispiele sind zwar meist für Java gedacht, aber wer alle Zeilen mit »queryInterface« überliest, kann den Rest auch gut für Tcluno nutzen.

Mit Unospection enthält Tcluno auch ein nützliches Werkzeug zum Ausprobieren eigener Skripte und zum Durchsuchen des Open-Office-API. Das Tool arbeitet wie eine Mischung aus Objektbrowser (Abbildung 5a) und Help-Viewer mit eingebauter Dokumentation (Abbildung 5b). Der Entwickler sieht auf Wunsch zu allen für ein Objekt möglichen Methoden den Hilfetext und er kann die Methode probeweise auch direkt aufrufen.

Abbildung 5a: Unospection zeigt eine Baumstruktur der Uno-Schnittstellen von Open Office. Der Benutzer kann alle Methoden für ein Objekt anzeigen und auch unmittelbar aufrufen.

Abbildung 5a: Unospection zeigt eine Baumstruktur der Uno-Schnittstellen von Open Office. Der Benutzer kann alle Methoden für ein Objekt anzeigen und auch unmittelbar aufrufen.

Abbildung 5b: Besonders praktisch: Unospection liefert die Dokumentation des kompletten Open-Office-API gleich mit. Der Programmierer hat sie damit an passender Stelle sofort zur Hand.

Abbildung 5b: Besonders praktisch: Unospection liefert die Dokumentation des kompletten Open-Office-API gleich mit. Der Programmierer hat sie damit an passender Stelle sofort zur Hand.

Navigation im API- und Doku-Dschungel

Unospection lohnt allein schon als Hilfebrowser. Diese Funktion findet sich unter dem Menüpunkt »Edit | Search Methods«. Das Tool enthält die Dokumentation sämtlicher Klassen und Methoden. Noch funktioniert Unospection nicht ganz reibungsfrei, es hat allerdings alle Anlagen für einen praktischen Helfer beim Entwickeln von Open-Office-Skripten. Die beiden Autoren Wolfgang Großer und Arnulf Wiedman haben mit Tcluno beachtliche Arbeit geleistet, die für Office-Automationen mehr als einen Blick Wert ist. (fjl)

Infos

[1] Tcluno-Projektseite: [http://www.tugm.de/Projekte/TCLUNO/]

[2] Tcluno bei Sourceforge: [http://sourceforge.net/projects/tcluno/]

[3] Beispielprogramme: [ftp://ftp.linux-magazin.de/pub/magazin/2006/03/Federlesen]

[4] OMG Corba: [http://de.wikipedia.org/wiki/Corba]

[5] Itcl: [http://incrtcl.sourceforge.net/itcl/]

[6] Tclvfs: [http://sf.net/projects/tclvfs]

[7] Activestate Tcl: [http://www.activestate.com/Tcl.plex]

[8] Bundesamt für Seeschifffahrt und Hydrographie: [http://www.bsh.de/de/Meeresdaten/Vorhersagen/Gezeiten/]

[9] Open-Office-SDK: [http://www.openoffice.org/dev_docs/source/sdk/]

[10] Pgbrowse: [http://homepage.mac.com/levanj/TclTk/]

[11] Tile Tk: [http://wiki.tcl.tk/14796]

[12] Websh: [http://tcl.apache.org/websh/]

[13] Tclkit: [http://www.equi4.com/pub/tk/downloads.html]

[14] Tkcon: [http://tkcon.sourceforge.net]

[15] Sockspy: [http://sockspy.sf.net]

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben