Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Excel - Wann ist "WAHR" ein Boolean? (https://www.delphipraxis.net/176275-excel-wann-ist-wahr-ein-boolean.html)

uligerhardt 23. Aug 2013 12:31

Excel - Wann ist "WAHR" ein Boolean?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!

Wir bekommen xlsx-Dateien geliefert, die wir mit D2007 per OLE importieren wollen. Diese enthalten u.a. Spalten, die als Boolean interpretiert werden sollen, und in Excel als Werte WAHR bzw. FALSCH erscheinen. Leider kann ich die in Excel formatieren, wie ich will - sie kommen mit VarType varOleStr statt varBoolean.

In test.xlsx im Anhang ist Zelle A2 aus so einer Datei kopiert. Zelle B2 hingegen stammt aus einer Datei, die ich selbst per OLE erzeugt habe. In den Spalten C-E stehen Kopien von A2, die ich auf unterschiedlichste Weise formatiert habe.
Anhang 39800
Wenn man ReadExcelBoolTest.exe aus dem Anhang laufen lässt, sieht man aber, das außer B2 alle Zellen als OleStr interpretiert werden. Kann ich das Problem irgendwie in Excel oder in meinem Lesecode beheben?

Olli73 23. Aug 2013 13:06

AW: Excel - Wann ist "WAHR" ein Boolean?
 
Teste mal folgendes in Excel:
- schreibe wahr (kleingeschrieben) in die 1. Zelle -> steht dann dort klein
- Formatiere die Zelle auf Standard -> nix passiert
- drücke <F2> und dann <Enter> (bearbeiten und bestätigen) -> WAHR wird groß, also nun korrekt erkannt

Was ich dir damit sagen will: Eine Änderung der Zellformatierung in Excel wird erst wirklich wirksam bei einer "Neueingabe". Deshalb formatiere ich bei einer Ausgabe an Excel immer zuerst die Zellen und übergabe dann erst die Daten.

p80286 23. Aug 2013 13:07

AW: Excel - Wann ist "WAHR" ein Boolean?
 
Such Dir was aus:
Delphi-Quellcode:
   (*
   if forcestring then
    for j := 0 to sg.colcount-1 do
  //    excel.activesheet.cells(1,j+1).EntireColumn.NumberFormat:='@';
  //    excel.activesheet.EntireColumn.Cells(1,2).NumberFormat:= '@';
  //    excel.activesheet.cells(1,j+1).NumberFormat:='@';
  *)
  if forcestring then begin
      excel.activesheet.Cells.NumberFormat := '@';
  end;
Das sind meine Versuche Excel zu Strings zu Überreden, Einfach mal das vorhandene Format auslesen?

Gruß
K-H

uligerhardt 23. Aug 2013 13:56

AW: Excel - Wann ist "WAHR" ein Boolean?
 
Zitat:

Zitat von Olli73 (Beitrag 1225998)
Teste mal folgendes in Excel:
- schreibe wahr (kleingeschrieben) in die 1. Zelle -> steht dann dort klein
- Formatiere die Zelle auf Standard -> nix passiert
- drücke <F2> und dann <Enter> (bearbeiten und bestätigen) -> WAHR wird groß, also nun korrekt erkannt

... und korrekt importiert. :thumb:

Zitat:

Zitat von Olli73 (Beitrag 1225998)
Was ich dir damit sagen will: Eine Änderung der Zellformatierung in Excel wird erst wirklich wirksam bei einer "Neueingabe". Deshalb formatiere ich bei einer Ausgabe an Excel immer zuerst die Zellen und übergabe dann erst die Daten.

Mal sehen, ob man das den Tabellenerstellern beibringen kann.

Blup 23. Aug 2013 14:37

AW: Excel - Wann ist "WAHR" ein Boolean?
 
Unabhängig vom Dateiformat (xls/xlsx) gibt es noch einen wichtigen Unterschied bei der OLE-Schnittstelle abhängig von der Excel-Version.
Bis Office2003 mussten bei der Zuweisung an Range[].Value Funktionsnamen in der Landessprache angegeben werden.
Ab Office2007 werden generell nur noch englische Funktionsnamen akzeptiert.

Falls die Datei auch mit OLE erstellt wird, gilt dies vermutliche auch für die Konstanten "TRUE" und "FALSE" (statt "WAHR" und "FALSCH").

Olli73 23. Aug 2013 14:38

AW: Excel - Wann ist "WAHR" ein Boolean?
 
Zitat:

Zitat von uligerhardt (Beitrag 1226007)
Zitat:

Zitat von Olli73 (Beitrag 1225998)
Was ich dir damit sagen will: Eine Änderung der Zellformatierung in Excel wird erst wirklich wirksam bei einer "Neueingabe". Deshalb formatiere ich bei einer Ausgabe an Excel immer zuerst die Zellen und übergabe dann erst die Daten.

Mal sehen, ob man das den Tabellenerstellern beibringen kann.

Meist stellt sich das Problem eher umgekehrt, da "Standard" die Standardeinstellung für Zellen ist. Ich habe z.B. viele Textfelder in meiner Datenbank, die meistens aber Zahlen (oft sogar mit führenden Nullen!) enthalten. Da gibts dann regelmäßig Probleme, wenn nicht zuerst explizit Textformat gewählt wurde. Die Frage ist also, wie bzw. von wem werden die Tabellen erstellt und warum wird dort explizit Textformat (für wahr/falsch) angegeben

uligerhardt 26. Aug 2013 08:48

AW: Excel - Wann ist "WAHR" ein Boolean?
 
Zitat:

Zitat von p80286 (Beitrag 1225999)
Das sind meine Versuche Excel zu Strings zu Überreden, Einfach mal das vorhandene Format auslesen?

Danke! Lesen und setzen von NumberFormat funktioniert soweit. Nur habe ich dann das Problem, das Olli73 beschrieben hat:
Zitat:

Eine Änderung der Zellformatierung in Excel wird erst wirklich wirksam bei einer "Neueingabe". Deshalb formatiere ich bei einer Ausgabe an Excel immer zuerst die Zellen und übergabe dann erst die Daten.
Hat jemand eine Idee, wie man so eine "Neueingabe" automatisieren kann? Am liebsten aus dem Delphi-Programm heraus, aber notfalls auch manuell in Excel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 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