.DateTimeValue für bestehendes Datumsfeld ändern

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

.DateTimeValue für bestehendes Datumsfeld ändern

Beitrag von Stephan »

Hallo,

in einen odt-Dokument ist ein Datumsfeld welches nicht fixiert ist. Dieses Datumsfeld soll auf das Datum von Datei-Eigenschaften-Geändert am: gesetzt und fixiert werden.

Folgender Code funktioniert nicht:

Code: Alles auswählen

Sub Main
	Dim k
	oEnum = ThisComponent.getTextFields().createEnumeration()
	Do While oEnum.hasMoreElements()
		oField = oEnum.nextElement()
		If oField.supportsService("com.sun.star.text.textfield.DateTime") Then
			If oField.isDate = True AND oField.IsFixed = False Then
				oField.DateTimeValue = ThisComponent.getDocumentProperties().ModificationDate
				oField.IsFixed = True
				oField.Update()
				k = k + 1
			End If
		End If
	Loop
	If k > 0 Then
			Msgbox k & " Datumsfeld(er) wurde(n) korrigiert."
		Else
			Msgbox "Keine Veränderungen vorgenommen."
	End If  
End Sub
Wer hat eine Lösung?

Gruß
Stephan
Dateianhänge
Feldfixierung-Test_korr.odt
(21.67 KiB) 100-mal heruntergeladen
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: .DateTimeValue für bestehendes Datumsfeld ändern

Beitrag von Toxitom »

Hey Stefan,
Wer hat eine Lösung?
Nimm die Zeile "oField.Update()" raus. Die schreibt Dir wieder das aktuelle Datum da rein - egal, welche Einstellung Du vorher gemacht hast.

Die Anzeige wird eh automatisch korrigiert.

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: .DateTimeValue für bestehendes Datumsfeld ändern

Beitrag von Stephan »

Hallo Tom,

das hilft leider nichts (getestet LO 6.3 und AOO 4.1.5).

Das der Zugriff auf das Datumsfeld an sich funktioniert ist offensichtlich, weil die Änderung für .IsFixed übernommen wird. Ich habe auch schon testweise das komplette DateTime-Struct aus Einzelwerten (Year, Month, ...) nachgebaut (statt gleich .ModificationDate) zu nutzen, brachte auch nichts.


Gruß
Stephan
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: .DateTimeValue für bestehendes Datumsfeld ändern

Beitrag von Toxitom »

Hey Stephan,
das hilft leider nichts....
Hmm, komisch. Bei mir geht es (Win 10, LO 5.3.x)

Hier: Ausgangsbild (Deine Datei):
bild1.jpg
bild1.jpg (54.59 KiB) 4324 mal betrachtet
Und nach Makro -Lauf (ich reduziere das Änderungsdatum um 1 Tag - um was zu sehen)
bild2.jpg
bild2.jpg (60.11 KiB) 4324 mal betrachtet
Mein Code:

Code: Alles auswählen

Sub Main
	Dim k
	oEnum = ThisComponent.getTextFields().createEnumeration()
	Do While oEnum.hasMoreElements()
		oField = oEnum.nextElement()
		If oField.supportsService("com.sun.star.text.textfield.DateTime") Then
			If oField.isDate = True AND oField.IsFixed = False Then
			    oDat = ThisComponent.getDocumentProperties().ModificationDate
         		oDat.Day = oDat.Day -1
			    
				oField.DateTimeValue = oDat
				oField.IsFixed = True
				'oField.Update()
'xray oField
'stop				
				k = k + 1
			End If
		End If
	Loop
	If k > 0 Then
			Msgbox k & " Datumsfeld(er) wurde(n) korrigiert."
		Else
			Msgbox "Keine Veränderungen vorgenommen."
	End If  
End Sub
Viele Grüße
Tom

Edit: Sorry BIld zwei war noch nicht aktualiert (Feldfunktion) - Feld ist aber fixiert.
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: .DateTimeValue für bestehendes Datumsfeld ändern

Beitrag von Toxitom »

Hei Stephan,

vielleicht noch ne Idee:

Die Zeile

oField.DateTimeValue = ThisComponent.getDocumentProperties().ModificationDate

splitten und ne Variable zwischenschieben? Vielleicht liefert diese ne Ref-Verbindung - und das Modufication-Date wird mit der Aktion angepasst?

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: .DateTimeValue für bestehendes Datumsfeld ändern

Beitrag von Stephan »

Hallo Tom,

ich hatte die Datei (ungewollt) zwischengespeichert, weshalb nun bei Geändert das aktuelle Datum stand ...

Es geht jetzt auch hier, allerdings nur unter LO, nicht unter AOO.
splitten und ne Variable zwischenschieben?
das meinte ich mit 'Date-Time-Struct aus Einzelwerten aufbauen' bzw. auch nicht, denn Du meinst ja wahrscheinlich NUR das hier:

Code: Alles auswählen

x = ThisComponent.getDocumentProperties().ModificationDate
oField.DateTimeValue = x


Gruß
Stephan
Antworten