Datum als Text

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

Moderator: Moderatoren

Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Datum als Text

Beitrag 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
Gruß Jörg

Win 10 Pro AOO 4.1.15
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Datum als Text

Beitrag 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.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Datum als Text

Beitrag 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.
Zuletzt geändert von Karolus am Do, 09.07.2015 19:41, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Datum als Text

Beitrag 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!
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Datum als Text

Beitrag 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
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Datum als Text

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Datum als Text

Beitrag 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.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Datum als Text

Beitrag 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.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Datum als Text

Beitrag 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. ;)
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Datum als Text

Beitrag 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
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Datum als Text

Beitrag 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
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Datum als Text

Beitrag 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
Gruß Jörg

Win 10 Pro AOO 4.1.15
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Datum als Text

Beitrag 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
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Datum als Text

Beitrag von Jörg »

Hallo clag,
für y erscheint der Wert 164 ????
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Datum als Text

Beitrag von Jörg »

P.S. es geht um den zweiten Code.
Gruß Jörg

Win 10 Pro AOO 4.1.15
Antworten