Calc: Datum und Zeit aus Dialog nicht als Long in Zelle

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

Moderator: Moderatoren

Woatze
**
Beiträge: 21
Registriert: Di, 19.01.2010 14:34

Calc: Datum und Zeit aus Dialog nicht als Long in Zelle

Beitrag von Woatze »

Hallo,
ich hoffe, ihr könnt mir bei folgendem Problem helfen: beim Starten eines Dialoges werden Zellen ausgelesen und der jew. Wert im Dialog dargestellt. Diese Werte kann man ändern und beim Schließen des Dialogs die Zellen somit überschreiben.
Jetzt hab ich aber das Problem, dass nicht nur Text, Zahlen oder Checkoxen vorkommen (was alles kein Problem darstellt), sondern auch Datums- und Zeitfelder. Diese werden aus Zellen ausgelesen, die mit TT.MM.JJJJ bzw. [HH]:MM (mehr als 24 Stunden) formatiert sind.
Im Dialog werden diese entsprechend in ein Datums- oder Zeitfeld bzw. in ein formatiertes Feld (wegen den [HH]:MM) eingelesen. Dort werden diese auch korrekt angezeigt. Wenn ich dann allerdings etwas ändere und die Werte wieder in die Zellen schreiben lasse (siehe Codebeispiel), dann habe ich z.B. beim Datum statt 14.02.2011 20110214 stehen.

Code: Alles auswählen

mySheet.getCellRangeByName("A1").string = Dlg_Kunde.GetControl("GebDat").date
Ich weiß auch, dass das in OOo normal ist, dass in Long abspeichert wird. Allerdings kann ich so in meiner Tabelle nicht weiterrechnen, da alle bestehenden Formeln darauf basieren, dass das Format TT.MM.JJJJ bzw. [HH]:MM ist.

Kann man das irgendwie beim Schließen des Dialoges schon umwandeln?

Alternativ hätte ich gedacht, der Wert wird z.B. aus Zelle A1 ausgelesen und im Dialog dargestellt. Beim Schließen wird der Wert aber (da es ja long ist) in Zelle B1 geschrieben und verändert mir somit meine Zella A1 nicht. Und in A1 müsste dann eine Formel stehen, die den Inhalt der Zelle B1 wieder in das Format TT.MM.JJJJ bzw. [HH]:MM umrechnet, damit ich in meiner Tabelle wieder wie bisher rechnen kann.

Kennt jemand das Problem oder kann mir da weiterhelfen? Ich hoffe, ich hab das verständlich genug rübergebracht.

Viele Grüße
Woatze
Frieder D.
****
Beiträge: 115
Registriert: Di, 10.01.2012 10:51
Kontaktdaten:

Re: Calc: Datum und Zeit aus Dialog nicht als Long in Zelle

Beitrag von Frieder D. »

Hallo Woatze,

probier es mahl damit:

Code: Alles auswählen

dDate=Dlg_Kunde.GetControl("GebDat").date
mySheet.getCellRangeByName("A1").string =Format(dDate,"DD.MM.YYYY")
'Alternativ:
'mySheet.getCellRangeByName("A1").string =Day(dDate)&"."&Month(dDate)&"."&Year (dDate)
Gruß Frieder
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Calc: Datum und Zeit aus Dialog nicht als Long in Zelle

Beitrag von Karolus »

Woatze hat geschrieben:Hallo,
....
Im Dialog werden diese entsprechend in ein Datums- oder Zeitfeld bzw. in ein formatiertes Feld (wegen den [HH]:MM) eingelesen. Dort werden diese auch korrekt angezeigt. Wenn ich dann allerdings etwas ändere und die Werte wieder in die Zellen schreiben lasse (siehe Codebeispiel), dann habe ich z.B. beim Datum statt 14.02.2011 20110214 stehen.

Code: Alles auswählen

mySheet.getCellRangeByName("A1").string = Dlg_Kunde.GetControl("GebDat").date

Code: Alles auswählen

s = Dlg_Kunde.GetControl("GebDat").date
mySheet.getCellRangeByName("A1").formulalocal = right(s,2)&"." & mid(s,5,2) & "." &left(s,4)
Woatze hat geschrieben:Ich weiß auch, dass das in OOo normal ist, dass in Long abspeichert wird. Allerdings kann ich so in meiner Tabelle nicht weiterrechnen, da alle bestehenden Formeln darauf basieren, dass das Format TT.MM.JJJJ bzw. [HH]:MM ist.
Der interne Wert des Datums 14.2.2011 ist aber 40588 und nicht 20110214. Solange es nicht um Textinhalte geht ist den Formeln das Zahlenformat völlig egal !

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Frieder D.
****
Beiträge: 115
Registriert: Di, 10.01.2012 10:51
Kontaktdaten:

Re: Calc: Datum und Zeit aus Dialog nicht als Long in Zelle

Beitrag von Frieder D. »

Hallo ,
die Beste Methode ist, das datum per "Value" an die Zelle zu übergeben, und dann die Zelle in dem Format "TT.MM.YYYY" zu formatieren,
da das Datum dann auch als Datum in Formeln genutzt werden kann.

Code: Alles auswählen

Sub formatet_Date

dim oDoc As object
dim dDate AS Date
dim oCell AS Object
Dim sFormatString AS String
Dim aLocale AS Object
dim nFormatKey As Long
oDoc=Thiscomponent
'Zum Testen Kannst du dan Löschen
dDate=Now
'Bei die müßte es dan heißen:
'dDate=Dlg_Kunde.GetControl("GebDat").date
oCell=oDoc.Sheets.getByindex(2).getCellRangeByName("A4") 'die Zelle holen
oCell.Value=dDate 'Das Datum hineinschreiben
' Eine neue Nummern-Format Spezifikation vorbereiten:
sFormatString = "TT.MM.JJJJ"
aLocale = CreateUnoStruct("com.sun.star.lang.Locale")
with aLocale 
	.Language = "de"
	.Country = "DE"
End With
' den Nummern-Format key erhalten (oder einen neuen erZeugen, falls er noch nicht existiert.) 
nFormatKey = oDoc.NumberFormats.queryKey(sFormatString, aLocale, True)
If nFormatKey = - 1 Then 'not found
	'create a new key for this number format
	nFormatKey = oDoc.NumberFormats.addNew(sFormatString, aLocale)
End If
'die Zelle formatieren:
oCell.NumberFormat = nFormatKey
end sub
Gruß Frieder
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Calc: Datum und Zeit aus Dialog nicht als Long in Zelle

Beitrag von Karolus »

Hallo
@Frieder
Der OP bekommt aus seinem Dialog den Wert 20110214 (offenbar 'yyyymmdd' )
Der 14.2.2011 entspricht nicht dem internen Calcwert 20110214 !

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Frieder D.
****
Beiträge: 115
Registriert: Di, 10.01.2012 10:51
Kontaktdaten:

Re: Calc: Datum und Zeit aus Dialog nicht als Long in Zelle

Beitrag von Frieder D. »

Hallo
Der OP bekommt aus seinem Dialog den Wert 20110214 (offenbar 'yyyymmdd' )
Dann muss der Wert erst in das interne Format umgewandelt werden.
Das Geht so:

Code: Alles auswählen

dDate=CDateFromIso(Dlg_Kunde.GetControl("GebDat").date)
Gruß Frieder
P.S.
All diese Formatierungs-Funktionen findet man in der LO- oder OO-Hilfe
unter "Makros und Programierung"
Antworten