Die freie und offene Büro-Software
Apache OpenOffice 4.0.1 ist verfügbar!

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

  2. Copyright und Lizenzhinweis

  3. Einführung

  4. BASIC-Makros

  5. Tastaturkürzel




1. Änderungen

Änderungen


11.02.2003

Erste Version.

28.06.2004

OOo 1.1 Beta -> OOo 1.1.x

oController.Formula -> oController.FormulaLocal

  1. Selbstdefinierte Zahlenformate

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:

  1. als Wertezelle, d.h. mit dem Datum bzw. der Zeit kann in Formeln weitergerechnet werden,
  2. 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:

  1. als Textfeld,
  2. 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.

Apache Software Foundation

Copyright & License | Privacy | Website Feedback | Contact Us | Donate | Thanks

Apache, the Apache feather logo, and OpenOffice are trademarks of The Apache Software Foundation. OpenOffice.org and the seagull logo are registered trademarks of The Apache Software Foundation. Other names appearing on the site may be trademarks of their respective owners.