🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Dialog Steuerelement von Typ Datum setzen und auslesen
Dialog Steuerelement von Typ Datum setzen und auslesen
Hallo,
ich habe einen Dialog mit einem Steuerelement vom Typ "Datumsfeld". Nun möchte ich diese Feld eine einer Basic Funktion setzten bzw. später auch wieder auslesen und den Wert in eine Tabelle schreiben.
So funktioniert es zwar, aber was in dem Steuerelement und später in der Tabelle steht, ist vom Typ "String" und nicht "Date"
oControl = oInput_Dialog.GetControl("Date")
oControl.text = Date()
Wenn ich folgendes versuche, bekomme ich einen Fehler:
oControl = oInput_Dialog.GetControl("Date")
oControl.Model.Date = Date()
Auch das Auslesen und Schreiben in die Tabelle habe ich nur über den Umweg "text" geschafft.
oControl = oInput_Dialog.GetControl("Date")
oCellVal = ThisComponent.Sheets(JournalSheetNo).getCellByPosition(4,iRow)
oCellVal.string = oControl.Text
Das geht doch bestimmt auch besser. Für jede Hilfe, auch nur Ideen, wäre ich sehr dankbar.
ich habe einen Dialog mit einem Steuerelement vom Typ "Datumsfeld". Nun möchte ich diese Feld eine einer Basic Funktion setzten bzw. später auch wieder auslesen und den Wert in eine Tabelle schreiben.
So funktioniert es zwar, aber was in dem Steuerelement und später in der Tabelle steht, ist vom Typ "String" und nicht "Date"
oControl = oInput_Dialog.GetControl("Date")
oControl.text = Date()
Wenn ich folgendes versuche, bekomme ich einen Fehler:
oControl = oInput_Dialog.GetControl("Date")
oControl.Model.Date = Date()
Auch das Auslesen und Schreiben in die Tabelle habe ich nur über den Umweg "text" geschafft.
oControl = oInput_Dialog.GetControl("Date")
oCellVal = ThisComponent.Sheets(JournalSheetNo).getCellByPosition(4,iRow)
oCellVal.string = oControl.Text
Das geht doch bestimmt auch besser. Für jede Hilfe, auch nur Ideen, wäre ich sehr dankbar.
Re: Dialog Steuerelement von Typ Datum setzen und auslesen
Hallo,
das Datumsfeld hat neben der Eigenschaft .text (welche den Anzeigetext liefert) hat auch die Eigenschaft .date (ein struct, der Tag, Monat und Jahr liefert).
Diese könntest du nutzen:
das Datumsfeld hat neben der Eigenschaft .text (welche den Anzeigetext liefert) hat auch die Eigenschaft .date (ein struct, der Tag, Monat und Jahr liefert).
Diese könntest du nutzen:
Das Ergebnis ist allerdings dasselbe wieoControl.date.day=day(date())
oControl.date.month=month(date())
oControl.date.year=year(date())
Beim Auslesen musst du einfach den Text vor dem Schreiben in ein Datum umwandeln:oControl.text=date()
Code: Alles auswählen
oCellVal.value = cdate(oControl.Text)
Gruß,
mikele
mikele
Re: Dialog Steuerelement von Typ Datum setzen und auslesen
Hallo stst,
Du willst das Datefield vorbelegen mit einem bestimmten Datum, oder einem bestimmten Monat und Jahr?
Wenn das abgeklärt ist, kann ich dir vielleicht weiter helfen.
Und nun wirds gar luschdich!
Umwech "text" is nich so jut.
Dadurch wird ja die dementsprechende Zelle fest auf Text eingestellt, was aber falsch ist.
Es gibt eigentlich nur 2 Varianten (falls ich mich jetzt nicht verzählt habe oder etwas vergessen hatte) die das Datum in der Zelle als Datum eintragen.
Und zwar wäre das:
.Value
.FormulaLocal
Damit ist es aber alleine noch nicht getan. Denn das betrifft ja nur die Zelle im Tabellenblatt. Es muss ja schließlich noch das Datum aus dem Datefield ausgelesen werden. Und da gibt es mehrere Variationen in kombination mit der Zelle. Mikele hat ja schon cdate als Beispiel genannt, und ich nenne noch 2 weitere.
- CDateToIso
- CDateFromIso
Und um die Verwirrung komplet zu machen, kann man nach dem man das "Datum" in die Zelle eingetragen hat, anschließend sofort dahergehen und die Zelle per Makro noch passend Formatieren, oder aber auch nicht. Das würde z.B. mit
geschehen.
Mal ein recht einfaches Beispiel ohne nachträgliche Formatierung.
Und wenn man beispielsweise im Datefield den 01.03.2011 ausgewählt hat, dann würde in der dementsprechenden Zelle folgendes Datum drin stehen.
01.03.11
Und wenn man nun noch das ganze mit Numberformat erweitert, also so z.B.
dann steht in der Zelle.
01.03.2011
Wie zu sehen, kann man mit der richtigen Kombination schon so einiges anstellen.
Ich habe da mal ne kleine simple Beispieldatei angehängt, wo das eben angesprochene zu finden ist. Du kannst damit selber noch ein wenig rumexperimentieren welche kombinationen was für ein Ergebnis liefern.
Wünsche dir schon mal so weit viel Vergnügen.
Gruß
balu
Sorry, aber ich bin mir nicht ganz sicher was Du da sagst, deshalb frage ich nach.Nun möchte ich diese Feld eine einer Basic Funktion setzten
Du willst das Datefield vorbelegen mit einem bestimmten Datum, oder einem bestimmten Monat und Jahr?
Wenn das abgeklärt ist, kann ich dir vielleicht weiter helfen.
So!Auch das Auslesen und Schreiben in die Tabelle habe ich nur über den Umweg "text" geschafft.
Und nun wirds gar luschdich!

Umwech "text" is nich so jut.
Code: Alles auswählen
oControl = oInput_Dialog.GetControl("Date")
oCellVal = ThisComponent.Sheets(JournalSheetNo).getCellByPosition(4,iRow)
oCellVal.string = oControl.Text
Es gibt eigentlich nur 2 Varianten (falls ich mich jetzt nicht verzählt habe oder etwas vergessen hatte) die das Datum in der Zelle als Datum eintragen.
Und zwar wäre das:
.Value
.FormulaLocal
Damit ist es aber alleine noch nicht getan. Denn das betrifft ja nur die Zelle im Tabellenblatt. Es muss ja schließlich noch das Datum aus dem Datefield ausgelesen werden. Und da gibt es mehrere Variationen in kombination mit der Zelle. Mikele hat ja schon cdate als Beispiel genannt, und ich nenne noch 2 weitere.
- CDateToIso
- CDateFromIso
Und um die Verwirrung komplet zu machen, kann man nach dem man das "Datum" in die Zelle eingetragen hat, anschließend sofort dahergehen und die Zelle per Makro noch passend Formatieren, oder aber auch nicht. Das würde z.B. mit
Code: Alles auswählen
.Numberformat = 36
Mal ein recht einfaches Beispiel ohne nachträgliche Formatierung.
Code: Alles auswählen
oSheet0.getCellRangeByName("A9").FormulaLocal = CDateFromIso(oDate.Date)
01.03.11
Und wenn man nun noch das ganze mit Numberformat erweitert, also so z.B.
Code: Alles auswählen
oSheet0.getCellRangeByName("A13").FormulaLocal = CDateFromIso(oDate.Date)
oSheet0.getCellRangeByName("A13").Numberformat = 36
01.03.2011
Wie zu sehen, kann man mit der richtigen Kombination schon so einiges anstellen.
Ich habe da mal ne kleine simple Beispieldatei angehängt, wo das eben angesprochene zu finden ist. Du kannst damit selber noch ein wenig rumexperimentieren welche kombinationen was für ein Ergebnis liefern.
Wünsche dir schon mal so weit viel Vergnügen.

Gruß
balu
- Dateianhänge
-
- Simpel-Dialog-Datefield_0.ods
- (12.25 KiB) 277-mal heruntergeladen
Re: Dialog Steuerelement von Typ Datum setzen und auslesen
Hallo balu,
ich habe deine Datei mal gestestet und musste leider feststellen, dass sie bei mir (LO4.4.7.2) nicht funktioniert.
Erzeugt eine Fehlermeldung, weil CDateFromIso() einen String erwartet, oDate.Date aber ein struct ist.
Bei der Gelegenheit habe ich gelernt, dass es eine Funktion CDateFromUnoDate() gibt, die das Gewünschte leistet, nämlich einen Datumswert liefert.
CDateToIso() in Verbindung mit Numberformat = 36 macht bei mir aus 20110308 (dem ISO-Datum) das Datum 24.02.-8576. Die Zahl 20110308 wird halt als Datumswert interpretiert.
ich habe deine Datei mal gestestet und musste leider feststellen, dass sie bei mir (LO4.4.7.2) nicht funktioniert.
Code: Alles auswählen
CDateFromIso(oDate.Date)
Bei der Gelegenheit habe ich gelernt, dass es eine Funktion CDateFromUnoDate() gibt, die das Gewünschte leistet, nämlich einen Datumswert liefert.
CDateToIso() in Verbindung mit Numberformat = 36 macht bei mir aus 20110308 (dem ISO-Datum) das Datum 24.02.-8576. Die Zahl 20110308 wird halt als Datumswert interpretiert.
Gruß,
mikele
mikele
Re: Dialog Steuerelement von Typ Datum setzen und auslesen
Hallo mikele,
ich Danke dir sehr für deine Rückmeldung
, auch wenn sie für mich leider negativ ist.
Okay, das wusste ich nicht das sich LO da anders verhält. Ich hatte hier mit OOo 3.2.1 und AOO 4.1.2 getestet, aber leider nicht mit LO. Und grad eben mal auf die schnelle mit LO 4.2.1.1 getestet, und siehe da, leider taucht meine Beispieldatei nicht, bekomme Fehlermeldungen.
Die erste Fehlermeldung kommt beim oLabeling2, welche ich einfach auskommentiert habe. Und die zweite kommt bei.
Okay, das muss ich mir merken, und der Sache mal aufm Grund gehen. Ist nur Schade das sich LO in dieser Hinsicht von AOO unterscheidet.

Deine Antwort kam aber auch zur rechten Zeit, denn ich wollte bezüglich Datefield noch etwas testen, und so weiß ich das ich nicht mit OOo oder AOO arbeiten darf, sondern dem Forum recht kommend nur mit LO.
Gruß
balu
ich Danke dir sehr für deine Rückmeldung


Okay, das wusste ich nicht das sich LO da anders verhält. Ich hatte hier mit OOo 3.2.1 und AOO 4.1.2 getestet, aber leider nicht mit LO. Und grad eben mal auf die schnelle mit LO 4.2.1.1 getestet, und siehe da, leider taucht meine Beispieldatei nicht, bekomme Fehlermeldungen.
Die erste Fehlermeldung kommt beim oLabeling2, welche ich einfach auskommentiert habe. Und die zweite kommt bei.
Code: Alles auswählen
oSheet0.getCellRangeByName("A7").Value = CDateFromIso(oDate.Date)
Na ist doch Prima. Wenigsten ein Erfolg.Bei der Gelegenheit habe ich gelernt, dass es eine Funktion CDateFromUnoDate() gibt, die das Gewünschte leistet, nämlich einen Datumswert liefert.

Deine Antwort kam aber auch zur rechten Zeit, denn ich wollte bezüglich Datefield noch etwas testen, und so weiß ich das ich nicht mit OOo oder AOO arbeiten darf, sondern dem Forum recht kommend nur mit LO.
Gruß
balu
Re: Dialog Steuerelement von Typ Datum setzen und auslesen
Hallo mikele,
ich bins noch mal, weil ich eben was getestet habe unter LO 4.2.1.1.
Denn wenn ich meine Beispieldatei nehme und dort die folgende Zeile
wie folgt ändere
kommt als Ergebnis eine 5 stellige Zahl dabei raus, z.B. 40607 für den 05.03.11.
Ergänze ich aber die letzt genannte Zeile mit Numberformat, so das sie wie folgt aussieht,
dann habe ich in der Zelle das Datum wie folgt stehen, 05.03.2011.
Ohne Numberformat kann man natürlich auch das Datum eintragen lassen, dann muss aber auch die Zelle nicht mit Value beschrieben werden, sondern mit FormulaLocal. Also so.
Und das Ergebnis wäre dann beispielsweise, 05.03.11.
Value = CDateToIso(oDatumFeld.text)
FormulaLocal = CDateToIso(oDatumFeld.text)
Okay, ich hätte es genauer erwähnen sollen das nicht nur eindeutige Datumswerte in der Datei angezeigt werden, sondern auch "Sonderwerte" die eigentlich Falsche Werte sind. Aber die Datei ist ja zum selber experimentieren um auch andere Datumsfunktionen auszutesten.
Gruß
balu
ich bins noch mal, weil ich eben was getestet habe unter LO 4.2.1.1.
Interessant!dass es eine Funktion CDateFromUnoDate() gibt, die das Gewünschte leistet, nämlich einen Datumswert liefert.
Denn wenn ich meine Beispieldatei nehme und dort die folgende Zeile
Code: Alles auswählen
oSheet0.getCellRangeByName("A7").Value = CDateFromIso(oDate.Date)
Code: Alles auswählen
oSheet0.getCellRangeByName("A7").Value = CDateFromUnoDate(oDate.Date)
Ergänze ich aber die letzt genannte Zeile mit Numberformat, so das sie wie folgt aussieht,
Code: Alles auswählen
oSheet0.getCellRangeByName("A7").Value = CDateFromUnoDate(oDate.Date)
oSheet0.getCellRangeByName("A7").Numberformat = 36
Ohne Numberformat kann man natürlich auch das Datum eintragen lassen, dann muss aber auch die Zelle nicht mit Value beschrieben werden, sondern mit FormulaLocal. Also so.
Code: Alles auswählen
oSheet0.getCellRangeByName("A7").FormulaLocal = CDateFromUnoDate(oDate.Date)
Ist ja auch so weit korrekt. Nur solltest Du auch schon genau erwähnen welche kombination mit CDateToIso Du meinst, denn schließlich habe ich in meiner Beispieldatei CDateToIso nicht nur einmal mit Numberformat angewendet.CDateToIso() in Verbindung mit Numberformat = 36 macht bei mir aus 20110308 (dem ISO-Datum) das Datum 24.02.-8576.
Value = CDateToIso(oDatumFeld.text)
FormulaLocal = CDateToIso(oDatumFeld.text)
Okay, ich hätte es genauer erwähnen sollen das nicht nur eindeutige Datumswerte in der Datei angezeigt werden, sondern auch "Sonderwerte" die eigentlich Falsche Werte sind. Aber die Datei ist ja zum selber experimentieren um auch andere Datumsfunktionen auszutesten.
Gruß
balu
Re: Dialog Steuerelement von Typ Datum setzen und auslesen
Ich bin mal ausnahmsweise der Alleinunterhalter. 
Also was ich momentan nicht so wirklich verstehe ist folgendes:
Meine Beispieldatei in LO geöffnet, und die im letzten Beitrag genannten Änderungen vorgenommen und ich bekomme ein Datum.
Ändere ich aber dort die Sub Main wie folgt, zum Datefield befüllen
dann wird das Datefield auch befüllt, aber so bald ein Datum ausgewählt wird, hagelt es Fehlermeldung bei den Zeilen die vorher ohne Befüllen funktioniert haben. Und das verstehe ich momentan überhaupt nicht.
Mag aber auch sein das ich vor lauter Müdigkeit den Wald vor lauter Bäumen nicht mehr sehe. Und deshalb gehe ich jetzt in die Heia.
Gruß
balu

Also was ich momentan nicht so wirklich verstehe ist folgendes:
Meine Beispieldatei in LO geöffnet, und die im letzten Beitrag genannten Änderungen vorgenommen und ich bekomme ein Datum.
Ändere ich aber dort die Sub Main wie folgt, zum Datefield befüllen
Code: Alles auswählen
Public AktDatum
Sub Main
DialogLibraries.loadLibrary("Standard")
oDialog1 = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
oSheet0 = ThisComponent.Sheets.GetByName("Settings")
AktDatum = oSheet0.getCellRangeByName("G1").value
oDate = oDialog1.getControl("DateField1")
oLabeling2 = oDialog1.getControl("Label2")
'REM ---------------------------------- Datefield befüllen anfang
stamp = AktDatum
tx = createUnoStruct("com.sun.star.util.Date")
tx.Day = Day(stamp)
tx.Month = Month(stamp)
tx.Year = Year(stamp)
oDate.setDate( tx )
REM ---------------------------------- Datefield befüllen ende'
oDialog1.execute
end sub

Mag aber auch sein das ich vor lauter Müdigkeit den Wald vor lauter Bäumen nicht mehr sehe. Und deshalb gehe ich jetzt in die Heia.
Gruß
balu
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.