Seite 1 von 1
.DateTimeValue für bestehendes Datumsfeld ändern
Verfasst: Mo, 30.03.2020 11:17
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
Re: .DateTimeValue für bestehendes Datumsfeld ändern
Verfasst: Mo, 30.03.2020 12:17
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
Re: .DateTimeValue für bestehendes Datumsfeld ändern
Verfasst: Mo, 30.03.2020 12:31
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
Re: .DateTimeValue für bestehendes Datumsfeld ändern
Verfasst: Mo, 30.03.2020 12:53
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 (54.59 KiB) 5025 mal betrachtet
Und nach Makro -Lauf (ich reduziere das Änderungsdatum um 1 Tag - um was zu sehen)

- bild2.jpg (60.11 KiB) 5025 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.
Re: .DateTimeValue für bestehendes Datumsfeld ändern
Verfasst: Mo, 30.03.2020 13:00
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
Re: .DateTimeValue für bestehendes Datumsfeld ändern
Verfasst: Mo, 30.03.2020 13:14
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