AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Falsche Zahlen beim Export von Delphi nach Excel

Ein Thema von enigma · begonnen am 18. Mai 2023 · letzter Beitrag vom 18. Mai 2023
Antwort Antwort
enigma

Registriert seit: 15. Jun 2008
47 Beiträge
 
#1

Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 14:35
Hallo,

ich habe eine kurze Frage:
Wenn ich von Delphi 2010 Werte nach Excel 2019 exportiere, s.u.
klappt das mit der Double-Variablen DN.
Bei dem Array mit Doublewerten treten jedoch falsche Werte in Excel auf.

Delphi-Quellcode:
      Excel.ActiveSheet.Cells[2, 4].Value := 'DN = ';
      Excel.ActiveSheet.Cells[2, 5].Value := FloatToStr(DN);

      Excel.ActiveSheet.Cells[3 + idxDa, 3].Value := 'TestArray[i] = ';
      Excel.ActiveSheet.Cells[3 + idxDa, 4].Value := FloatToStr(TestArray[i]);
Vielen Dank für eure Tipps!
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#2

AW: Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 15:15
Deklaration von DN ist?
Deklaration von TestArray ist?

Typproblem bei der Interpretation und Zuweisung nach Value? (z. B. Tausenderzeichen bzw. Komma?)

Welche Werte sind in TestArray enthalten, welche Werte erscheinen in Excel?

FloatToStr liefert (vermutlich) das Dezimalkomma. Es könnte aber sein, dass bei der Zuweisung auf Value als Dezimaltrenner der Punkt erwartet wird.

Da Value aber ein Variant sein dürfte, erscheint es mir fraglich, ob die Nutzung von FloatToStr überhaupt erforderlich ist.

Meiner Meinung nach sollte es auch so gehen:
Delphi-Quellcode:
  Excel.ActiveSheet.Cells[2, 4].Value := 'DN = ';
  Excel.ActiveSheet.Cells[2, 5].Value := DN;

  Excel.ActiveSheet.Cells[3 + idxDa, 3].Value := 'TestArray[i] = ';
  Excel.ActiveSheet.Cells[3 + idxDa, 4].Value := TestArray[i];
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

AW: Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 15:24
Deklaration von DN ist?
Deklaration von TestArray ist?
Ist eigentlich egal, da FloatToStr irgendeinen "Float" entgegennimmt und einen String auf gibt.

Aber die Werte wären interessant. (zu Großes oder zu Kleines wird ja anders als String dargestellt)


Was für einen Typ hat Value?
Falls Variant/OleVariant anstatt WideString, warum dann als String übergeben, anstatt als "Float" (Double) ?


Zitat:
Da Value aber ein Variant sein dürfte,
Habs nicht ausprobiert, aber in Excel2000/Excel2010/ExcelXP hatte ich versucht das zu finden, aber mich beim Nachverfolgen von ActiveSheet>Cells>Value verlaufen und es dann aufgegeben .... Nja, "Value" ist meistens ein WideString, aber gibt es auch als Integer (hier unwahrscheinlich) und selten auch als OleVariant.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (18. Mai 2023 um 15:27 Uhr)
  Mit Zitat antworten Zitat
enigma

Registriert seit: 15. Jun 2008
47 Beiträge
 
#4

AW: Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 15:38
Erstmal danke für euere Tipps!

In Delphi erhalte ich mit ShowMessage für TestArray[0] = 5,8726....
in Excel mit
Excel.ActiveSheet.Cells[3 + idxDa, 4].Value := FloatToStr(TestArray[i]);
19.862.388,00

ohne FloatToStr:
Excel.ActiveSheet.Cells[3 + idxDa, 4].Value := TestArray[i];
198,62388
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

AW: Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 15:45
Und welchen Wert hat i?

Die Bereichsprüfung mal aktivieren?

Es steht nicht zufällig im Compiler-Log etwas von wegen "i sei nicht initialisiert"?
Und wenn ja, warum hört niemand darauf?


Zitat:
ShowMessage
Tipp: lernen wie man zumindestens die Grundfunktionen des Debugger benutzt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 15:53
Value war bisher immer ein Variant, zumindest bei den Delphi- und Excelversionen, mit denen ich zu tun hatte.

Warum soll das jetzt anders sein.

Variant hat den Vorteil, dass man da "reinschieben" kann was man will und den Nachteil, dass da interpretiert wird, wie Excel, ... es wollen.

Und da können zuweilen Unterschiede zwischen gewünscht, erwartet und tatsächlich auftreten

Den Typ von Value erfährt man (meist) durch Nachschauen in der PAS-Datei zur entsprechenden Typelib.

Alternativ in die Doku schauen: excel.range.value

Warum sollten TestArray[0] und TestArray[i] den gleichen Wert enthalten? Das kann nur dann zutreffen, wenn i = 0.

Und 19.862.388,00 sowie 198,62388 zeigen eindeutig, dass FloatToStr das Komma als Dezimaltrenner liefert, während Excel den Punkt als Dezimaltrenner erwartet und dann irgendwie interpretiert, nur nicht richtig.

Die Stringkonvertierung von Doublewerte bei der Zuweisung auf Value ist schlicht und einfach überflüssig und Kontraproduktiv.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 15:58
"Dieses" Value vielleicht.
Aber nicht alle "Value" in dieser Unit.
Im ExcelRange hatte ich das Array nicht gefunden und demnach auch nicht was das für ein Typ ist und welches der vielen Value das nun ist.


Genau, wenn es Variant/OleVariant ist, warum dann nicht direkt den Float zuweisen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (18. Mai 2023 um 16:03 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#8

AW: Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 16:02
"Dieses" Value vielleicht.
Aber nicht alle "Value" in dieser Unit.
Natürlich "Dieses" Value und nicht irgendeines. Es ist ja auch nicht jedes i ein Integer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#9

AW: Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 16:06
Drum hatte ich ja aufgegeben und ihn dann gefragt.

Sein CodeIngight wird es hoffenltich besser wissen, als meine verkorkste Suche in der Unit.




Auch wenn OleVariant als übergeordnetes Objekt leider bissl pervers sind.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: Falsche Zahlen beim Export von Delphi nach Excel

  Alt 18. Mai 2023, 16:12
Es lässt zumindest aufmerken, dass hier zwei Indexvariablen idxDa und i verwendet werden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Alt 21. Aug 2023, 06:47     Erstellt von redball4az
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz