[gelöst] Datum in Textfeld (Placeholder) einfügen

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

Moderator: Moderatoren

GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

[gelöst] Datum in Textfeld (Placeholder) einfügen

Beitrag von GrobMakrobiker »

Hallo allerseits,

ich komme an folgender Stelle nicht weiter und bitte um einen kleinen Hinweis...

Ich lese eine Datenarray aus einer Calc-Tabelle aus und füge es in Writer mittels Textmarken (Placeholder) ein.
Das funktioniert auch ganz gut,allerdins wird der Datum-Wert als Zahl eingefügt (z.B. 41205).

Bisher sieht es so aus:

Code: Alles auswählen

			
If oFeld.Placeholder = arrKopfzeile(l,0) Then 'hier wird der Tabellenkopf ausgelesen. Die Platzhalter heißen wie der Spaltenkopf.
    neuerText=arrDataSatz(l,0)
	    If IsNumeric(neuerText) Then 'falls Zahlen in der Zelle stehen...
		 ' neuesDatum= CDate(neuerText) 'geht nicht
		  neuesDatum= Format(neuerText, "DDDD, \d\e\n D. M YYYY")
		  msgbox neuesDatum 'zeigts richtig an, lässt sich aber so nicht schreiben
       	       oText.insertString(oCursor,neuesDatum,true)
       	       oText.insertString(oCursor,Format(neuerText, " "DDDD, \d\e\n D. M YYYY", true)' produziert auch eine Fehlermeldung
 	 End If
  	   		oText.insertString(oCursor,neuerText,true) 'dieser Teil ist unproblematisch
Meine Fehlversuche sind im Code noch drinnen... nicht dokumentiert ist mein Versuch ein neues Datumsfeld anzulegen, aber das klappte auch irgendwie nicht.

Meine Fragen:
1. Wie kann ich den Datumswert in den Platzhalter im Text schreiben, so dass er richtig formatiert ist?
2. Gibt es eine elegantere Version der Überprüfung, ob es sich um ein Datum handelt als "IsNumeric"? "IsDate" läuft bei mir einfach so durch...

Vielen Dank, auch für kleinere gedankliche Anstöße
Groby
Zuletzt geändert von GrobMakrobiker am Do, 27.05.2010 11:57, insgesamt 1-mal geändert.
Maxx88
Beiträge: 8
Registriert: Mo, 10.05.2010 10:06

Re: Datum in Textfeld (Placeholder) einfügen

Beitrag von Maxx88 »

Hi,
bin relativ neu in der Makroprogrammierung also wenn ich jetzt Quark erzähle bitte ich um Berichtigung.

Soweit ich das immer Verstanden habe sind die Datumswerte in Calc im Hintergrund immer Zahlen und erst die Formatierung der Zahlen bewirkt das das ganze als Datum angezeigt wird.

Da im Writer ja nichts als Datumsfeld formatiert werden kann würde ich das mittels einer Funtkion in einen String umwandeln.

In etwa so:

Code: Alles auswählen

function calcToForm(calc) 'SUB zum Umrechnen eines Datums aus der Tabelle in das Format des Formulars
	DIM datform as long	
	DIM str as string
	datform=Year(calc)&Format(Month(calc),"00")&Format(Day(calc),"00") 'String uaus dem Datum zusammensetzten im FOrmat YYYYMMDD
	calcToForm=datform
end function
Das Format kannst du dir ja dann alleine abändern.

Ich hoffe ich konnte etwas helfen.

Gruß Max
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: Datum in Textfeld (Placeholder) einfügen

Beitrag von GrobMakrobiker »

Hallo Max,

danke für Deine Idee, aber damit kriege ich es nicht hin.

Code: Alles auswählen

neuesDatum= Format(neuerText, "DDDD, \d\e\n D. M YYYY")
msgbox neuesDatum
zeigt genau an, was ich will...
Warum kann man es nicht mit

Code: Alles auswählen

   oText.insertString(oCursor, neuesDatum,true)
oder mit

Code: Alles auswählen

   oText.insertString(oCursor,Format(neuerText, "DDDD, \d\e\n D. M YYYY"),true)
ins Feld schreiben?

Das macht mich irgendwie ratlos.... aber vielen Dank nochmals
Groby
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Datum in Textfeld (Placeholder) einfügen

Beitrag von DPunch »

Aloha

Bei mir funktioniert das Einfügen per CDate absolut problemlos.

Was das Überprüfen angeht, kannst Du mit einem improvisierten Try-Catch-Block arbeiten - wenn der übergebene Satz zu einem Datum umgewandelt werden kann, wird er das auch, wenn nicht, dann eben nicht.

Wenn Deine Platzhalter als Platzhalter vom Typ "Text" im Dokument sind, kannst Du mal das hier probieren:

Code: Alles auswählen

If oFeld.Placeholder = arrKopfzeile(l,0) Then
	neuerText=arrDataSatz(l,0)
	On Local Error GoTo InsertAnyway
	neuerText = CDate(neuerText)
	InsertAnyway:
	oFeld.Anchor.String = neuerText
End If
Wie liest Du eigentlich Dein Datenarray aus der Calc-Tabelle aus? Per ".getDataArray"?
Wenn ja, dann wundert mich, dass Du mit der Schreibweise "arrKopfzeile(1,0)" darauf zugreifen kannst. Das sollte eigentlich nicht funktionieren.
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: Datum in Textfeld (Placeholder) einfügen

Beitrag von GrobMakrobiker »

Hmmm- leider gehts nicht, egal ob der Text eingefügt wird oder nicht springt das Makro immer zum "InsertAnyway".
Dort gehts dann nciht weiter, da der "Anchor" nicht gefunden wird. Ich hab überall gesucht, verstehe das aber nicht so ganz ... und hänge mal voller Hoffnung meine Dateien an, vielleicht weiß ja jemand Rat...
Vielen Dank
Groby
Dateianhänge
Vertrag Schreiben.ods
(17.28 KiB) 38-mal heruntergeladen
Testvertrag.ott
(21.24 KiB) 42-mal heruntergeladen
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Datum in Textfeld (Placeholder) einfügen

Beitrag von DPunch »

Aloha

Ich hab Dir das Makro mal entsprechend angepasst.

Schau mal, ob Du damit was anfangen kannst.
Dateianhänge
Vertrag Schreiben.ods
(15.18 KiB) 73-mal heruntergeladen
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: Datum in Textfeld (Placeholder) einfügen

Beitrag von GrobMakrobiker »

Ja, so geht's!

Code: Alles auswählen

nSpalte = IndexInArray(sPlaceholderName,arrKopfzeile)
scheint ja viel besser zu sein als meine Versuche... und je länger ich darüber nachdenke, desto logischer erscheint es mir. Wieder was dazugelernt, Danke!
Zu:

Code: Alles auswählen

oDatei.lockControllers
muss ich mich dann nochmals informieren, bis ich es richtig verstehe, was da passiert...

however it works!

Vielen Dank für die schnelle Hilfe!!!!!
Groby
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: [gelöst] Datum in Textfeld (Placeholder) einfügen

Beitrag von DPunch »

Aloha

Code: Alles auswählen

lockControllers
unterdrückt einfach die Benachrichtigung der Controller, dass sie ihre Darstellung aktualisieren sollen.
In Deinem Fall sind es nicht allzuviele Felder, die sich aktualisieren müssen, so dass der Geschwindigkeitsvorteil kaum auffallen dürfte - aber je mehr Felder Du per Makro ersetzt, desto öfter würde sich die Anzeige normalerweise erneuern und desto länger würde es dauern. Mit lockControllers kann man viele Vorgänge enorm beschleunigen.
(Gilt übrigens nicht nur für Aktionen in Writer-Dokumenten, sondern z.B. auch für das Kopieren, Ersetzen etc in Calc-Dokumenten, eben alles, wofür das Dokumentview sich aktualisieren müsste, um die neuen Daten anzuzeigen)
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: [gelöst] Datum in Textfeld (Placeholder) einfügen

Beitrag von GrobMakrobiker »

Vielen Dank für die Erläuterung!
Alles läuft nun wie geschmiert. Die Beträge wurden zwar als Datum ausgegeben, aber ich habe sie in der Ausgangstabelle nun einfach als "String" (also mit Hochkomma) deklariert, das ist so kein Problem.
Es macht ja alles viel Spaß, aber der Zeitaufwand ist echt beträchtlich, bis man (als Laie) mal alles am Laufen hat
Viele Grüße!
Groby
Antworten