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

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] Datum in Textfeld (Placeholder) einfügen

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

von GrobMakrobiker » Do, 27.05.2010 12:38

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

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

von DPunch » Do, 27.05.2010 12:08

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)

Re: Datum in Textfeld (Placeholder) einfügen

von GrobMakrobiker » Do, 27.05.2010 11:54

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

Re: Datum in Textfeld (Placeholder) einfügen

von DPunch » Do, 27.05.2010 11:32

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) 74-mal heruntergeladen

Re: Datum in Textfeld (Placeholder) einfügen

von GrobMakrobiker » Do, 27.05.2010 10:12

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) 39-mal heruntergeladen
Testvertrag.ott
(21.24 KiB) 42-mal heruntergeladen

Re: Datum in Textfeld (Placeholder) einfügen

von DPunch » Mi, 26.05.2010 16:43

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.

Re: Datum in Textfeld (Placeholder) einfügen

von GrobMakrobiker » Mi, 26.05.2010 14:29

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

Re: Datum in Textfeld (Placeholder) einfügen

von Maxx88 » Mi, 26.05.2010 14:05

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

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

von GrobMakrobiker » Mi, 26.05.2010 13:25

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

Nach oben