Seite 1 von 2

Datum als Text

Verfasst: Do, 09.07.2015 18:30
von Jörg
Hallo Fachleute,

nachstehender Originalcode, den mir freundlicherweise clag geschrieben hat, überträgt Text als Text, Datum als Datum und Zahlen als Zahlen. Alles chic.

Code: Alles auswählen

sub ChangeCustomerData

	myDoc = thisComponent
	mySheet = myDoc.sheets(1)
	myData = myDoc.sheets(0)

	check = mysheet.getCellByPosition(5,6).string
	myPid = mysheet.getCellByPosition(4,7).string

	if check = "1" then
		search = "~"
		do until search = myPid
			y=y+1
			search = myData.getCellByPosition(0,y).string
		loop

 		for i=0 to 8
			ReplaceData = mysheet.getCellByPosition(5,8+i).string 
			if ReplaceData <> "" then  
			myData.getCellByPosition(1+i,y).string = ReplaceData 
			end if
		next
	else 
		print "Pat.Nr nicht im Bestand"
		exit sub
	end if
	end sub
	
Diesen Code habe ich nun für eine andere Anwendung geändert, wie folgt:

Code: Alles auswählen

sub ChangeCustomerData

	myDoc = thisComponent
	mySheet = myDoc.sheets(0)
	myData = myDoc.sheets(1)     
	myPid = mysheet.getCellByPosition(1,1).string
		search = "~"
		do until search = myPid
			y=y+1
			search = myData.getCellByPosition(0,y).string
		loop
msgbox  "Rechnungsnummer" & chr(10)& mypid 
 		for i=0 to 8
			ReplaceData = mysheet.getCellByPosition(2,2+i).string 
			if ReplaceData <> "" then  
			myData.getCellByPosition(7+i,y).string = ReplaceData 					
	end if
	next
end sub
Das Problem hier ist, dass das Datum welches geändert werden soll, als Text (also mit Hochkomma) eingefügt wird.
Habt Ihr 'ne Idee?
Gruß Jörg

Re: Datum als Text

Verfasst: Do, 09.07.2015 18:57
von clag
Hallo Jörg,

vermuten würde ich das im ersten Fall aus einer als Text formatierten Zelle das Datum gelesen wird
und auch wieder in eine Text formatierte Zelle geschrieben wird.

In der zweiten Variante schreibst du vermutlich in eine Standard formatierte Zelle deshalb wird das ' davor gesetzt.
leere die Zielzellen und formatiere die Zielzellen als "Text" und versuch es dann noch einmal.

Re: Datum als Text

Verfasst: Do, 09.07.2015 19:30
von Karolus
Wie die Zielzelle formatiert ist, ist völlig irrelevant, solange letzlich ein String geschrieben wird:
die 4.letzte Codezeile:

Code: Alles auswählen

     myData.getCellByPosition(7+i,y).string = ReplaceData  
...wird grundsätzlich einen Text hinterlassen, und notfalls ein 'Hochkomma zur impliziten Textformatierung davorsetzen.

nachstehender Originalcode, den mir freundlicherweise clag geschrieben hat, überträgt Text als Text, Datum als Datum und Zahlen als Zahlen. Alles chic
ich kann in dem Code beim besten Willen keine Stelle erkennen an der kein Text geschrieben wird.

Re: Datum als Text

Verfasst: Do, 09.07.2015 19:40
von clag
hallo Karolus,

wo unterscheidet sich denn nun
clag hat geschrieben:schreibst du vermutlich in eine Standard formatierte Zelle deshalb wird das ' davor gesetzt.
von
Karolus hat geschrieben:grundsätzlich einen Text hinterlassen, und notfalls ein 'Hochkomma zur impliziten Textformatierung davorsetzen.
Karolus hat geschrieben:Wie die Zielzelle formatiert ist, ist völlig irrelevant,

das sehe ich anders, genau das spielt die entscheidende Rolle!

Re: Datum als Text

Verfasst: Do, 09.07.2015 19:47
von komma4
Vermuten ist schlecht - Testen ist besser:

setString setzt eine Zeichenkette - setValue einen Wert

Ein Datum in CALC ist intern "nur" die Anzahl Tage seit dem "Null-Datum" [Extras>Einstellungen...>Calc>Berechnen>Datum]

Der Wert von heute 42195 wird durch ein Zahlenformat als Datum dargestellt. [C2]

Sonderfall: wird eine Zeichenkette (=Datum in gültigem Format) an .FormulaLocal zugewiesen, so wird sie als Datum interpretiert und übertragen [C7]

Siehe Beispiele im Anhang
calc_get_set_date.ods
(11.5 KiB) 103-mal heruntergeladen

Re: Datum als Text

Verfasst: Do, 09.07.2015 19:48
von Karolus
clag hat geschrieben:hallo Karolus,

wo unterscheidet sich denn nun
clag hat geschrieben:schreibst du vermutlich in eine Standard formatierte Zelle deshalb wird das ' davor gesetzt.
von
Karolus hat geschrieben:grundsätzlich einen Text hinterlassen, und notfalls ein 'Hochkomma zur impliziten Textformatierung davorsetzen.
Das stimmt soweit,( wir schreiben das gleiche )



clag hat geschrieben:
Karolus hat geschrieben:Wie die Zielzelle formatiert ist, ist völlig irrelevant,

das sehe ich anders, genau das spielt die entscheidende Rolle!
Bei dem gezeigten Code spielt die Formatierung der Zielzelle keine Rolle, weil sowieso Text geschrieben wird

Re: Datum als Text

Verfasst: Do, 09.07.2015 20:05
von clag
Hallo Karlus,
Karolus hat geschrieben:ich kann in dem Code beim besten Willen keine Stelle erkennen an der kein Text geschrieben wird.
dieser Nachsatz von dir ist doch genau das, was ich genauso meinte/ schrieb,
das makro "handelt" nur Text und schreibt diesen dann in eine nicht Textformatierte Zelle
darum wird con Calc das ' davor gesetzt.

Da sind wir uns doch einig.

@komma4
du schreibst es ja auch ganz deutlich
wenn das "Datum" ein Datum wäre, wäre es ein Datums Wert
durch das Lesen als String wird es zum Text "1.5.2015"
und wird dann als Text in eine nicht Textzelle als '1.5.2015 eingefügt

Ich habe da keine andere Meinung.

und @Jörg sollte mit Text formatierten Zielzellen das ' los sein.

Re: Datum als Text

Verfasst: Do, 09.07.2015 20:13
von Karolus
Hallo

Die entscheidende Stelle ist für mich Jörgs Kommentar:
Jörg hat geschrieben:nachstehender Originalcode, den mir freundlicherweise clag geschrieben hat, überträgt Text als Text, Datum als Datum und Zahlen als Zahlen. Alles chic.
Das trifft nicht zu, weil dort auch nur Text in die Zellen geschrieben wird.

Re: Datum als Text

Verfasst: Do, 09.07.2015 20:23
von clag
@Karolus

ja die Aussage von Jörg ist da nicht stimmig zum gezeigten Code.

Das beschriebene "Fehlverhalten" ist das Resultat von Text in einer "Standard Zelle" erzwingen.

Ich hoffe darin sind wir und einig. ;)

Re: Datum als Text

Verfasst: Do, 09.07.2015 21:04
von komma4
clag hat geschrieben:ist das Resultat von Text in einer "Standard Zelle" erzwingen
Nein:

die verwendete Methode setString() setzt Text - unabhängig davon, wie die Ziel-Zelle formatiert ist

Re: Datum als Text

Verfasst: Do, 09.07.2015 21:17
von clag
Hallo komma4,

dann haben wir unterschiedlich reagierende Syteme
dieses Makro

Code: Alles auswählen

Sub Main
oCalc = ThisComponent
oSheet = oCalc.CurrentSelection.SpreadSheet
osheet.GetCellRangeByName("A2").String = "1.5.2015"  
osheet.GetCellRangeByName("B2").String = "1.5.2015"  
End Sub
produziert bei mir in
A2 Standard formatiert ein ['1.5.2015] und B2 ein [1.5.2015] weil Text formatiert vor dem einfügen

Re: Datum als Text

Verfasst: Do, 09.07.2015 21:33
von Jörg
Hallo Fachleute,
danke für die angeregte Diskusion.
Da ich zunächst nur ein Datum eintragen will, habe ich den Code so geändert.

Code: Alles auswählen

sub Neues_Mahnungsdatum

	myDoc = thisComponent
	mySheet = myDoc.sheets(). getByName ("Tabelle12")
	myData = myDoc.sheets().getByName ("Rechnungen")     
	myPid = mysheet.getCellByPosition(1,7).value
		search = "~"
		do until search = myPid
			y=y+1
			search = myData.getCellByPosition(0,y).value
		loop
 
 		for i=0 to 0
			ReplaceData = mysheet.getCellByPosition(7,24).value
			if ReplaceData <> "" then  
			myData.getCellByPosition(35+i,y).value = ReplaceData 					
	end if
	next
end sub
Zur Ausgangssituation (Originalcode)kann ich nur sagen, daß ich die betreffenden Zellen (Datum und Zahlen) nicht als Text formatiert habe.
Obwohl es ein Widerspruch zu sein scheint, funktioniert es aber so. :shock:
Wenn Ihr gestattet, würd ich gern ein anderes Problem einstellen.
Ähnlicher Code:

Code: Alles auswählen

sub status_aendern

	myDoc = thisComponent
	mySheet = myDoc.sheets(). getByName ("Tabelle12")
	myData = myDoc.sheets().getByName ("Rechnungen")     
	myPid = mysheet.getCellByPosition(1,7).string
		search = "~"
		do until search = myPid
			y=y+1
			search = myData.getCellByPosition(0,y).string
		loop
 
 		for i=0 to 0
			ReplaceData = mysheet.getCellByPosition(6,23).string 'ZielZelle ist G24 Wird aber in H25 geschrieben
			if ReplaceData <> "" then  
			myData.getCellByPosition(7+i,y).string = ReplaceData 					
	end if
	next
end sub
Das Problem: Anstatt in G23 schreibt mir der Code in H25. :(
Wie kommt denn das ???
Gruß Jörg

Re: Datum als Text

Verfasst: Do, 09.07.2015 21:51
von clag
Hallo Jörg,
ein Thema ein Thread bitte.
Jörg hat geschrieben:Das Problem: Anstatt in G23 schreibt mir der Code in H25. :(
Wie kommt denn das ???
weil hier

Code: Alles auswählen

myData.getCellByPosition(7+i,y).string = ReplaceData  
geschrieben wird
und 7 ist H und vermutlich y=24 ist

füge doch mal unter dem "loop" ein

Code: Alles auswählen

print y   

ein, dann bekommst du den Wert von y zu sehen

Re: Datum als Text

Verfasst: Do, 09.07.2015 22:05
von Jörg
Hallo clag,
für y erscheint der Wert 164 ????
Gruß Jörg

Re: Datum als Text

Verfasst: Do, 09.07.2015 22:07
von Jörg
P.S. es geht um den zweiten Code.