![]() |
Falsche Zahlen beim Export von Delphi nach Excel
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:
Vielen Dank für eure Tipps!
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]); |
AW: Falsche Zahlen beim Export von Delphi nach Excel
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]; |
AW: Falsche Zahlen beim Export von Delphi nach Excel
Zitat:
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:
|
AW: Falsche Zahlen beim Export von Delphi nach Excel
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 |
AW: Falsche Zahlen beim Export von Delphi nach Excel
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:
|
AW: Falsche Zahlen beim Export von Delphi nach Excel
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: ![]() 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. |
AW: Falsche Zahlen beim Export von Delphi nach Excel
"Dieses" Value vielleicht.
Aber nicht alle "Value" in dieser Unit. :angle: 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. |
AW: Falsche Zahlen beim Export von Delphi nach Excel
Zitat:
|
AW: Falsche Zahlen beim Export von Delphi nach Excel
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. |
AW: Falsche Zahlen beim Export von Delphi nach Excel
Es lässt zumindest aufmerken, dass hier zwei Indexvariablen idxDa und i verwendet werden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz