Difference between revisions of "DE/Timestamp in Calc"

From Apache OpenOffice Wiki
< DE
Jump to: navigation, search
(New page: Timestamp in Calc von StefanW, Mai 2009 ([http://de.openoffice.org/servlets/BrowseList?list=users&by=thread&from=2229779 Diskussion dazu] ...)
 
 
Line 1: Line 1:
[[Category:de.openoffice.org|Timestamp in Calc]]
+
[[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
Personal tools