[Excel] Worksheet zu CSV exportieren mit vorgegebenen Spaltenformaten

Yaslaw

alter Rempler
Moderator
[ironie]Ich liebe Excel[/ironie]

So, zum Thema. Ich habe unfreiwilig den Job gekriegt ein VBA-Code zu schreiben um Excel-Sheets in CSV zu wandeln, damit diese anderorts automatisiert über sqlldr eingelesen werden können.

Soweit so gut, das geht grundsätzlich. Doch leider ist Excel so bedinungsfreundlich, dass alle Feldformate eins zu eins exportiert werden. Je nachdem, kommt ein Datum dann als 3.11.2011 oder 11/1/2011 oder sonstwas raus. Für den sqlldr muss ich aber das Datum angeben, also will ich ein Datum IMMER im gleichen Format.
Das hab ich jetzt mit Hickhack halbwegs hingkriegt. Jetzt scheitert es bei den Zahlen, die in Excel natürlich mal mit Tausendertrennzeichen und mal ohne Trennzeichen daherkommen. Dementsprechend erscheint im csv 123456.7 oder "123,456.7".

Ich kann jetzt natürlich jedes Excel-Sheet vor dem SaveAs(pathCsv, xlCSV) umformatieren. Dass kanns aber irgendwie auch nicht sein.

Kennt jemand ein Weg, wie man ein Sheet ins CSV-Format bringt mit Formatdefinitionen?
 
Grüezi Yaslaw

Hmmm, eine .CSV-Datei ist nunmal eine reine Text-Datei ohne jede Format-Informationen.

Man kann Werte strikte als Text definieren indem man sie mit Gänsefüsschen umgibt, aber das wars dann auch schon.
Ev. hilft es auch, in diesem Zusammenhang mit einer Schema.ini zu arbeiten.


Wie genau liegen denn deine Quelldaten vor?
Wie genau soll/muss die .CSV-Datei denn aussehen?
Und vor allem wie genau lautet dein bisher verwendeter Code?

Und auch wann genau wird dein Datum 'umgewandelt'?
Ist das schon nach dem Ausschreiben, also in der .CSV-Datei der Fall oder erst nach dem erneuten Einlesen derselben in Excel?
 
Zuletzt bearbeitet:
Die Quelldaten liegen im XLSX-Format vor. Diese exportiere ich in csv. mit dem saveAs() (Code folgt heute im Büro).

Eingelesen werden sie anschliessen mit dem Oracle Loader sqlldr. Dem muss ich iene Konfiguration mitgeben.

Das Problem sind zum Beispiel:

Zahlen die im Excel durch den User so formatiert wurden: 10'000.00
Die erscheinen dan im CSV als "10,000.00".
Der sqlldr kann dieses Format aber nicht als Zahl intepretieren.

Das Datum. Wenn der User in der Schweiz das Datum im Excel formatiert, kommt es so in das CSV-File: 31.11.2011.
Exportiere ich aber eine Datei die von einem System in Portugal geliefert wird, dann sieht der Export so aus: 11/31/2011
Auch da muss ich dem sqlldr angeben wie das Format ist. Also brauche ich das Einheitlich.

Schema.ini? Kenn ich noch nicht. Hast du da per Zufall grad ein Tipp wo ich suchen soll? Ist das Bestandtil von Excel?
 
Grüezi yaslaw

Formatierte Werte in eine text-Datei auszulesen ist keine gute Idee, da das von den Ländereinstellungen abhängig ist. Daher sollten da immer nur reine Zahlenwerte ausgeschrieben werden.

Wichtig ist auch zu wissen, wie die Anwendung diese Daten beim Import dann behandelt - also sollte man das Format in der .CSV darauf abstimmen.

Also schauen wir uns daher mal den Code näher an, denke ich.
 
Formatierte Werte in eine text-Datei auszulesen ist keine gute Idee, da das von den Ländereinstellungen abhängig ist. Daher sollten da immer nur reine Zahlenwerte ausgeschrieben werden.

Wichtig ist auch zu wissen, wie die Anwendung diese Daten beim Import dann behandelt - also sollte man das Format in der .CSV darauf abstimmen.
Ganz meine Worte.

Der ganze Code ist in VBA für MS Access 2007 (Ist nicht auf meinem Mist gewachsen)
Visual Basic:
    Dim xlsx       As New Excel.Application
    Dim wb      As Excel.workbook
    Dim ws      As Excel.Worksheet

    Set wb = xlsx.Workbooks.Open(pathXlsx)
    Set ws = wb.Sheets(1)
Call ws.SaveAs(pathCsv, xlCSV)
 
Grüezi Yaslav

Hmmm, wie sind denn die Zellen in Excel formatiert - ist das wirklich nur eine Zahl mit entsprechenden Zellenformat oder stehen diese Werte etwa als 'Text' in den betreffenden Zellen?

Denn eigentlich sollte diese Methode reine Werte korrekt als solche auslesen.

Alles weitere ist IMO dann nur über gezielte VBA-Programmierung zu erreichen/steuern.

Dazu müssten aber ein paar Beispiel-Daten in Form einer Mappe vorliegen.
 

Neue Beiträge

Zurück