OpenOffice.org Basic genießt nicht gerade den Ruf eines professionellen Werkzeugs und hält tatsächlich dem Vergleich mit Programmiersprachen wie C++, Java oder Python kaum stand. Das heißt aber nicht, dass man mit OOoBasic keine mächtigen und flexiblen Lösungen programmieren könnte. Seit die Skriptsprache in der Lage ist, die Anwendungen aus OpenOffice miteinander zu verbinden, taugt sie sogar perfekt zum Selbstbau individueller Werkzeuge. Wir beweisen Ihnen das an einem Tool für professionelle, nach Stundensätzen bezahlte Schreiber. Für die ist es wichtig zu wissen, wieviel Zeit sie für einzelne Dokumente benötigen, damit sie diese ihren Auftraggebern in Rechnung stellen können.
Man könnte eine Calc-Tabelle für solche Berechnungen verwenden, in die man Dokumentenname, Datum, benötigte Zeit und weitere Informationen von Hand einträgt. Besonders effizient erscheint das in Zeiten automatischer Datenverarbeitung aber nicht. Stattdessen kann man mit OpenOffice.org Basic ein Werkzeug anfertigen, das die Zeit, , die man für ein Writer-Dokument braucht, selbständig im Auge behält. Die trägt es Tool dann automatisch in eine Base-Datenbank ein, die nachher für die Rechnungsstellung alle benötigten Informationen liefert.
Ein Anwender ohne Programmierkenntnisse mag sich von einer solchen Aufgabenstellung einschüchtern lassen – um dieses nützliche Helferlein anzufertigen, benötigt man jedoch nichts weiter als ein Makro und eine einfache Base-Datenbank.
Datenbank in Base anlegen
Bevor Sie sich um das Makro kümmern, legen Sie in Base eine einfache Datenbank an, in der das Makro anschließend die wichtigsten Daten über das Erstellen der Dokumente ablegt. Starten Sie OpenOffice.org, klicken Sie auf Neues Dokument | Datenbank und danach auf Öffnen: Damit starten Sie den Datenbank-Assistenten. Übernehmen Sie die Option Neue Datenbank erstellen und klicken Sie auf Fertig stellen. Vergeben Sie einen Namen, zum Beispiel Zeiterfassung. Mit OK legen Sie die Datenbank an.
Nun klicken Sie im Arbeitsfenster von Base auf Tabellen und danach auf Tabelle in der Entwurfsansicht erstellen. Es öffnet sich ein neues Fenster, in dem Sie die Felder Ihrer Zeiterfassung definieren. Welche das sein sollen, hängt davon ab, was Sie dort später sehen möchten. Mindestens sollten Sie aber vier Felder für Datenbankschlüssel, Dokument, Datum und Zeit dort eintragen (Tabelle "Feldnamen" und Abbildung 1).
Feldnamen
| Feldname | Feldtyp | Beschreibung |
|---|---|---|
| ID | Integer [INTEGER] | Primärschlüssel (für jeden Datensatz einzigartig und eindeutig) |
| Dateiname | Text [VARCHAR] | Name des erfassten Office-Dokuments |
| Zeit | Integer [INTEGER] | Dauer für das Erstellen des aktuellen Dokuments |
| Datum | Datum [DATE] | Tag, an dem Sie den Datensatz hinzugefügt haben |
Klicken Sie mit der rechten Maustaste auf das kleine Feld links neben dem Feldnamen ID und wählen Sie aus dem Kontextmenü Primärschlüssel. Base fügt dem Feld ein kleines Schlüsselsymbol hinzu. Stellen Sie in den Feldeigenschaften bei Auto-Wert Ja ein, damit Base diesen Wert später automatisch hochzählt. Haben Sie alle Felder erstellt, speichern Sie die Tabelle zum Beispiel unter dem Namen time und schließen die Entwurfsansicht. Klicken Sie auch im Datenbankfenster von Base auf Datei | Speichern, um die gesamte Datenbank bis hierher zu sichern.
Im nächsten Schritt registrieren Sie Ihre Datenbank als Datenquelle, auf die Sie mit anderen OpenOffice-Anwendungen zugreifen wollen. Dafür wählen Sie aus dem Menü Extras die Optionen und im Bereich OpenOffice.org Base die Datenbanken (Abbildung 2). Taucht die Datenbank in der Liste der registrierten Datenbanken nicht auf, klicken Sie auf Neu sowie Durchsuchen, wählen die Zeiterfassung per Doppelklick und OK aus und schließen das Menü.
OpenOffice-Makro erstellen
Alle Einzelprogramme des freien Büropakets arbeiten mit OpenOffice.org Basic zusammen. Das bedeutet: Mit welcher Applikation Sie auf den Basic-Editor zugreifen, spielt keine Rolle. Sie erreichen den Editor immer über Extras | Makros | Makros verwalten | OpenOffice.org Basic. Markieren Sie das Makro Main und klicken Sie auf Bearbeiten. Anschließend präsentiert sich der Bildschirm etwa so, wie in Abbildung 3 zu sehen. Um den unten beschriebenen Code einzufügen, scrollen Sie einfach ans Ende des Skripts.
Das OOoBasic-Makro, das Sie für Ihre Zeiterfassung benötigen, besteht aus zwei Teilen: Der erste startet und stoppt einen Timer und berechnet die dazwischen vergangenen Minuten, der zweite zeichnet für gleich drei Dinge zuständig: Er verschafft sich Namen und Entstehungsdatum des aktuellen Dokuments, baut eine Verbindung zur Datenbank auf und schreibt die erhobenen Daten in einen neuen Datensatz.
Starten Sie mit dem Timer, der wiederum aus zwei Subroutinen besteht: Die erste sorgt für den Beginn der Zeiterfassung, die zweite stoppt sie und misst die verbrauchte Zeit. Dazu definieren Sie in OOoBasic zunächst zwei globale Variablen: GlobalElapsedTime und GlobalStartTime (Listing 1, Zeilen 2 und 3). Sie brauchen diese Variablen, um die Werte für Start- und verbrauchte Zeit zwischen den Subroutinen für StartTime und EndTime auszutauschen. Die Subroutine für StartTiming() fällt ziemlich einfach aus (Listing 1, Zeile 6 ff.).
rem — Globale Variablen
Global ElapsedTime as Long
Global StartTime
rem — Timer starten
Sub StartTiming()
If ElapsedTime <> 0 then
Message="Es laeuft bereits eine Zeitmessung!" & Chr(13) & "Moechten Sie eine neue Messung starten?"
Else
Message="Moechten Sie eine Zeitmessung starten?"
EndIf
Answer=MsgBox(Message,4,"Zeitmessung starten?")
If Answer=7 then End
StartTime=Time
ElapsedTime=Timer
End Sub
Als erstes prüft sie anhand der Variablen ElapsedTime, ob bereits eine Zeitmessung läuft. Ist der Wert der Variable Null, fordert die Subroutine den Anwender auf, eine neue Session zu starten. Um die verbrauchte Zeit zu berechnen, wenn der Anwender die Messung stoppt, verwendet die Routine die beiden Variablen StartTime und ElapsedTime. StartTime erhält ihren Wert von der Variablen Time, die wiederum die aktuelle Uhrzeit von der Systemzeit des Rechners bezieht. ElapsedTime fungiert als Timer und holt sich ihren Wert aus der gleichnamigen Funktion.



