Hallo,
ich arbeite an einem Programm, welches Datensätze aus extra dafür erstellten Excelvorlagen über
OLE ausliest und in ein entsprechendes Übertragungsformat umwandelt (Übertragungsdatei ist reines Textformat).
Nun kam von Kundenseite der Wunsch hinzu auch
CSV Dateien einlesen und übertragen zu können. An sich kein Problem, solange sich die erstellte
CSV Datei an der Excelvorlage orientiert. Sprich es sollen bei der Umwandlung die gleichen Codierungs-Funktionen bei der
CSV-Datei zum Einsatz kommen, wie auch schon bei den bisherigen Excel-Dateien, um sich größere Arbeiten an der eigentlichen Programmlogik selbst zu ersparen.
Nun tritt das Problem auf, dass die Daten der
CSV-Datei von Excel falsch interpretiert werden und die einzelnen Felder mit diversen leider unpassenden Formaten belegt werden und diese falsch dargestellten Daten vom Programm anschließend auch so übernommen werden. Als Beispiel aus dem Uhrzeit-String "12:20" wird "0,513888888888889" ausgelesen oder aus "01.06.2007" wird "39234" usw. Das merkwürdige ist auch, öffne ich die
CSV-Datei mit Excel, werden die meisten Daten noch korrekt dargestellt. Wandle ich jetzt aber das Arbeitsblatt in das eigentlich benötigte Text-Format um, so ist ein Großteil der Datensätze unbrauchbar geworden.
Deshalb funktioniert es leider auch nicht, das Arbeitsblatt zu Beginn als Text-Format zu formatieren.
Delphi-Quellcode:
ExcelApp:=CreateOLEObject('Excel.Application');
ExcelApp.Visible:=false;
ExcelApp.DisplayAlerts:=False;
ExcelApp.Workbooks.Open(Excelvorlage.text);
ExcelApp.Workbooks[1].Worksheets[1].Select;
ExcelApp.Selection.NumberFormat := '@';
Andere Versuche waren es einzelne Felder mit .NumberFormat zu formatieren, was auch nicht zum Erfolg führte.
Z.B. in der
CSV-Datei steht "06:00". Excel interpretiert dies als benutzerdefiniertes Format und macht daraus "06:00:00" (auch wenn weiterhin "06:00" angezeigt werden). Delphi liest aus diesem Benutzerdefinierten-Feld nun aber "0,25" aus. Ändert man nun das Zellenformat in Text macht Excel von sich aus daraus ebenfalls wieder eine falsche "0,25", die so natürlich auch ausgelesen wird.
Das voranstellen eines Hochkommas brachte ebenso nichts, da hierbei auch nicht die richtigen Ursprungsdaten ausgelesen werde, sondern die falsch dargestellten einschließlich dem hinzugefügten Hochkomma.
Und mein dritter nicht brauchbarer Lösungsansatz war es, die
CSV-Datei einfach temporär ins Excel-Format zu speichern und dann wieder einzulesen. Dies klappte allerdings auch nicht, da diese Datei von Excel nicht mehr erkannt wird.
Ich häng an diesem Problem/Denkfehler schon den ganzen Vormittag fest und habe noch keine brauchbare Lösung gefunden. Aber es sollte doch irgendwie möglich sein, Daten aus
CSV-Files mit dem Umweg über Excel in ein Delphi-Programm zu importieren?
Danke und Gruß
Arne