Difference between revisions of "DE/Timestamp in Calc"
(New page: Timestamp in Calc von StefanW, Mai 2009 ([http://de.openoffice.org/servlets/BrowseList?list=users&by=thread&from=2229779 Diskussion dazu] ...) |
Plutonium244 (talk | contribs) |
||
Line 1: | Line 1: | ||
− | [[Category: | + | [[Category:DE|Timestamp in Calc]] |
von [[User:Stefanw|StefanW]], Mai 2009 | von [[User:Stefanw|StefanW]], Mai 2009 |
Latest revision as of 00:31, 22 October 2012
von StefanW, Mai 2009
(Diskussion dazu auf der Mailingliste users@de.openoffice.org)
Thomas Kübler hat auf der Users-Mailingliste die Frage gestellt, wie man in einer Tabelle in einer Spalte einen Text und in einer Spalte daneben einen Zeitstempel erhalten kann, der nach jeder Eingabe von Text automatisch erzeugt wird.
Hier eine Beispieldatei mit einer möglichen Makrolösung: TimestampBeispiel.ods
Beim Öffnen des Dokuments wird per Makro ein Event Listener aktiviert. Hierzu wurde die Prozedur AddListener mit dem Ereignis Dokument öffnen verknüpft. Der Listener wird per Makro wieder deaktiviert, wenn das Dokument geschlossen wird. Hierzu wurde die Prozedur RemoveListener mit dem Ereignis Dokument schließen verknüpft.
Der Listener überwacht die Zellen, die durch den benannten Zellbereich Eingabebereich bestimmt sind. Findet in einer dieser Zellen eine Änderung statt, so wird die Prozedur Change_modified aufgerufen. Darin wird die relative Position der gerade geänderten Zelle ermittelt und die aktuelle Zeit wird in die Zelle eingetragen, die die gleiche relative Postion in Bezug auf eine Zelle hat, die durch den Bereichsnamen Anker bestimmt wird.
(Dank auch an Michael E. Bohn von Sun. Er hat mir nach einem Workshop, den ich in 2006 bei ihm besucht hatte, ein Beispiel mit dem Event Listener zugesandt.)
REM ***** BASIC *****
global oRange
global oAnchor
global oListener
Sub AddListener
'add listener for cell oCell
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
oRange = oSheet.getCellRangeByName("Eingabebereich")
oAnchor = oSheet.getCellRangeByName("Anker")
oListener = CreateUnoListener( "Change_", "com.sun.star.util.XModifyListener" )
oRange.addModifyListener( oListener )
End Sub
Sub RemoveListener
oRange.removeModifyListener( oListener )
End Sub
Sub Change_modified( aEvent )
odoc = thisComponent
oZelle = oDoc.getCurrentSelection().getCellByPosition(0,0)
oSheet = oDoc.Sheets(0)
iZeile = oZelle.getCellAddress().Row - oRange.rangeAddress.startRow
iSpalte = oZelle.getCellAddress().Column - oRange.rangeAddress.startColumn
iZeile = oAnchor.getCellAddress().Row + iZeile
iSpalte = oAnchor.getCellAddress().Column + iSpalte
oZelle = oSheet.getCellByPosition(iSpalte,iZeile)
oZelle.value = now()
End Sub