OpenOffice.org Workshop
Wie kann man das aktuelle Datum oder die aktuelle Uhrzeit per Tastatur dauerhaft in ein Text- oder Tabellendokument einfügen?
von Daniel Rentz.
Inhaltsverzeichnis
1. Änderungen
Änderungen |
|
11.02.2003 |
Erste Version. |
28.06.2004 |
OOo 1.1 Beta -> OOo 1.1.x oController.Formula -> oController.FormulaLocal
|
13.07.2004 |
OOo 2.0 hinzugefügt Textfelder in Writer einfügen |
14.07.2004 |
Lizenzhinweis |
2. Copyright und Lizenzhinweis
© Copyright 2004 Daniel Rentz
2.1 Public Documentation License Notice
The contents of this Documentation are subject to the Public Documentation License Version 1.0 (the "License"); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at //licenses/PDL.html.
The Original Documentation is "Wie kann man das aktuelle Datum oder die aktuelle Uhrzeit per Tastatur dauerhaft in ein Text- oder Tabellendokument einfügen?".
The Initial Writer of the Original Documentation is Daniel Rentz, Copyright © 2004. All Rights Reserved
Initial Writer contact: dr@openoffice.org.
All Trademarks are properties of their respective owners.
2.2 Produktnamen und Warenzeichen
Alle in diesem Dokument erwähnten Produktnamen und eingetragenen oder nicht eingetragenen Warenzeichen sind nur zum Zweck der Identifizierung erwähnt und sind das ausschließliche Eigentum ihrer Halter.
3. Einführung
Was in MS Word von vornherein mit Alt+Umschalt+D oder Alt+Umschalt+T bzw. in MS Excel mit Strg+Punkt oder Strg+Umschalt+Punkt funktioniert, erfordert in Calc oder Writer anfänglich etwas Arbeit. Dafür ist die nun folgende Lösung flexibler und funktioniert identisch in Text- und Tabellendokumenten.
Diese Anleitung ist für OpenOffice.org 1.0.x, OpenOffice.org 1.1.x und OpenOffice.org 2.0 geschrieben. Wenn es Unterschiede wie z.B. in der Menüstruktur gibt, werden diese mit [1.0], [1.1] bzw. [2.0] gekennzeichnet.
4. BASIC-Makros
4.1 Allgemeines
Um eine neue Funktionalität an eine Tastenkombination zu binden, benötigen Sie zuerst ein BASIC-Makro. Das Makro speichern Sie im Standard-Modul von OpenOffice.org, damit es unabhängig von geöffneten Dokumenten verfügbar ist.
In einem Tabellendokument wird es zwei Möglichkeiten geben, ein Datum bzw. eine Zeit einzufügen:
- als Wertezelle, d.h. mit dem Datum bzw. der Zeit kann in Formeln weitergerechnet werden,
- als Textzelle.
Dabei wird die Zelle überschrieben, auf die der Cursor gerade zeigt.
In einemTextdokument wird es ebenfalls zwei Möglichkeiten geben, ein Datum bzw. eine Zeit einzufügen:
- als Textfeld,
- als einfacher Text.
Dabei wird an der aktuellen Cursorposition eingefügt bzw. ein vorher ausgewählter Text ersetzt.
Ein neues BASIC-Makro legen Sie im Dialog Extras->Makro... [1.0], Extras->Makros->Makro... [1.1] bzw. Extras->Makros->Makros verwalten->OpenOffice.org Basic [2.0] an. Im Listenfeld Makro aus sollte schon das Standard-Modul (soffice->Standard->Module1) ausgewählt sein. Mit der Schaltfläche Bearbeiten gelangen Sie in den Quelltext-Editor.
4.2 Parameterlose Makros für Tastaturkürzel
Sub Insert_Date_As_Text Insert_As_Text( Date ) End Sub Sub Insert_Date_As_Value Insert_As_Value( Date, "TT. MMM JJJJ", com.sun.star.util.NumberFormat.DATE ) End Sub Sub Insert_Time_As_Text Insert_As_Text( Time ) End Sub Sub Insert_Time_As_Value Insert_As_Value( Time, "HH:MM:SS", com.sun.star.util.NumberFormat.TIME ) End Sub
4.3 Hilfsfunktion zum Einfügen als Text
'------------------------------------------------- ' Inserts the passed string into a document. ' ' parameter aValue ' The string to be inserted into the document. '------------------------------------------------- Sub Insert_As_Text( aValue As String ) oDesktop = createUnoService( "com.sun.star.frame.Desktop" ) oController = oDesktop.CurrentFrame.Controller oDocument = oController.Model ' insert as text for Calc ---------------------- If oDocument.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) Then oSelection = oController.Selection oSelection.Formula = "'" & aValue ' apostroph forces string ' insert as text for Writer -------------------- ElseIf oDocument.supportsService( "com.sun.star.text.TextDocument" ) Then oSelection = oDocument.CurrentSelection( 0 ) oSelection.Text.insertString( oSelection, aValue, True ) EndIf End Sub
4.4 Hilfsfunktion zum Setzen eines Zahlenformates
'------------------------------------------------- ' Sets the passed number format as property of an object. ' ' parameter oController ' The controller that contains a number formatter. ' ' parameter oDestObj ' The destination object. Format is set at its NumberFormat property. ' ' parameter aFormat ' The string representation of the number format, ' or empty string to use the passed default format. ' ' parameter nStdFormat ' Index of a default number format (com.sun.star.util.NumberFormat ' constants), if no string is specified. '------------------------------------------------- Sub Set_Number_Format(_ oController As Object,_ oDestObj As Object,_ aFormat As String,_ nStdFormat As Integer ) Dim aLocale As New com.sun.star.lang.Locale oFormatter = oController.Model.NumberFormats If aFormat = "" Then oDestObj.NumberFormat = oFormatter.getStandardFormat( nStdFormat, aLocale ) Else Dim nKey As Long nKey = oFormatter.queryKey( aFormat, aLocale, True ) If nKey < 0 Then nKey = oFormatter.addNew( aFormat, aLocale ) EndIf oDestObj.NumberFormat = nKey EndIf End Sub
4.5 Hilfsfunktion zum Einfügen als Wert oder Textfeld
'------------------------------------------------- ' Inserts the passed string as value into a document. ' ' parameter aValue ' The string representation of a value (date or time). ' ' parameter aFormat ' The string representation of the number format, ' or empty string to use the passed default format. ' ' parameter nStdFormat ' Index of a default number format (com.sun.star.util.NumberFormat ' constants), if no string is specified. '------------------------------------------------- Sub Insert_As_Value(_ aValue As String,_ aFormat As String,_ nStdFormat As Integer ) oDesktop = createUnoService( "com.sun.star.frame.Desktop" ) oController = oDesktop.CurrentFrame.Controller oDocument = oController.Model ' insert as value for Calc --------------------- If oDocument.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) Then oSelection = oController.Selection oSelection.FormulaLocal = aValue Set_Number_Format( oController, oSelection, aFormat, nStdFormat ) ' insert as value for Writer ------------------- ElseIf oDocument.supportsService( "com.sun.star.text.TextDocument" ) Then ' create a text field oField = oDocument.createInstance( "com.sun.star.text.TextField.DateTime" ) oField.IsFixed = True Set_Number_Format( oController, oField, aFormat, nStdFormat ) ' insert into current selection oSelection = oDocument.CurrentSelection( 0 ) oSelection.Text.insertTextContent( oSelection, oField, True ) End If End Sub
4.6 Erläuterungen
Die Hauptfunktionen rufen je eine Hilfsfunktion mit den entsprechenden Parametern auf. Diese Hilfsfunktionen (Insert_As_Text und Insert_As_Value) erkennen, von welchem Dokumenttyp das Makro aufgerufen wurde. Dann werden die passenden Funktion aufgerufen, um den Wert in das Dokument einzufügen.
Um für Wertezellen oder Textfelder ein selbstdefiniertes Zahlenformat zu setzen, wird die Formatdefinition einfach in den Hauptfunktionen Insert_Date_As_Value und Insert_Time_As_Value mit übergeben. Wenn hier ein Leertext angegeben wird, verwenden die aufgerufenen Hilfsfunktionen das angegebene Standardformat.
5. Tastaturkürzel
In OpenOffice.org kann man nicht alle Tasten mit Funktionen belegen, z.B. ist es nicht möglich, die Punkt- und Komma-Taste zu belegen, wohl aber die Plus-, Minus- oder Stern-Taste. Allerdings sind viele dieser Tasten bereits belegt (dazu später mehr). Deshalb werden in diesem Beispiel die Tastenkombinationen Strg+Umschalt +7 bis Strg+Umschalt+0 benutzt. Diese sind in Text- und Tabellendokumenten noch frei.
Im Dialog Extras->Anpassen im Karteireiter Tastatur wählen Sie zuerst (wichtig!) oben rechts OpenOffice.org aus, um das neue Kürzel für alle Applikationen zu definieren. Danach wählen Sie in den unteren Listenfeldern Ihr BASIC-Makro aus. Zuerst wählen Sie im linken Listenfeld Bereich das Modul OpenOffice.org BASIC-Makros->Standard->Module1 [1.0] und [1.1] bzw. OpenOffice.org BASIC-Makros->user->Standard->Module1 [2.0], dann daneben im Feld Funktion das Makro Insert_Date_As_Text. Jetzt können Sie im oberen Teil des Dialogs ein Tastaturkürzel auswählen. Wählen Sie die Kombination Strg+Umschalt+7 aus, und drücken dann die Schaltfläche Ändern. Ebenso verfahren Sie mit den anderen Tastenkürzeln:
Tastaturkürzel |
Makrofunktion |
Strg+Umschalt+7 |
Insert_Date_As_Text |
Strg+Umschalt+8 |
Insert_Time_As_Text |
Strg+Umschalt+9 |
Insert_Date_As_Value |
Strg+Umschalt+0 |
Insert_Time_As_Value |
Das ist auch schon alles. Ein schneller Test in einem Text- und einem Tabellendokument sollte nun das gewünschte Ergebnis liefern.
Wie bereits erwähnt, sind viele Tastaturkürzel bereits belegt. Das kann unerwartete Überraschungen zur Folge haben. Man kann ein Kürzel global (für alle Dokumenttypen) zuweisen; aber in einem speziellen Dokumenttyp dasselbe Kürzel mit einer anderen Funktion überschreiben. Zum Beispiel ist Strg+Plus global frei, aber in Textdokumenten belegt. Wenn Sie jetzt Strg+Plus global belegen, wird das in Textdokumenten nicht funktionieren, da zuerst die dokument-spezifischen Kürzel gesucht und benutzt werden. Sie müssten also zusätzlich im Tastatur-Dialog das Textdokument-Kürzel freigeben.