Datumsformatierungen bei CSV Datei

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von galnar.

    Datumsformatierungen bei CSV Datei

    Hallo zusammen,

    ich habe da mal eine Frage an die Profis ;).
    Ich wandele mit untenstehendem Code ein Blatt einer Excel Datei in eine CSV Datei um. Das Funktioniert auch exakt so wie es soll .... bis auf eine Ausnahme. Es gibt in dem Excel Blatt eine Spalte die ein Datum enthält und dieses ist in der CSV Datei komplett anders formatiert.

    Die Deutsche Standard Formatierung von dd/MM/yyyy wird geändert in die US Formatierung MM/dd/yyyy. Außerdem werden führende Nullen bei Tag und Monat entfernt. Gibt es eine Möglichkeit das Datum in der deutschen Formatierung und ohne Entfernung der Nullen in die CSV Datei zu übernehmen? Die entsprechenden Felder in dem Excel Blatt sind übrigens als Datum formatiert.

    Ich danke jedem für seine Hilfe.


    VB.NET-Quellcode

    1. Public Sub Create_ExcelFile_InCsvFormat(ByVal ExcelFileName As String,
    2. ByVal CsvFileName As String)
    3. If IO.File.Exists(ExcelFileName) Then
    4. Dim xlApp As Excel.Application = Nothing
    5. Dim xlWorkBooks As Excel.Workbooks = Nothing
    6. Dim xlWorkBook As Excel.Workbook = Nothing
    7. Dim xlWorkSheet As Excel.Worksheet = Nothing
    8. xlApp = New Excel.Application
    9. xlApp.DisplayAlerts = False
    10. xlWorkBooks = xlApp.Workbooks
    11. xlWorkBook = xlWorkBooks.Open(ExcelFileName)
    12. xlWorkSheet = CType(xlWorkBook.ActiveSheet, Excel.Worksheet)
    13. xlWorkBook.SaveAs(CsvFileName, FileFormat:=Excel.XlFileFormat.xlCSVWindows)
    14. xlWorkBook.Close()
    15. xlApp.UserControl = True
    16. xlApp.Quit()
    17. If Not xlWorkSheet Is Nothing Then
    18. Marshal.FinalReleaseComObject(xlWorkSheet)
    19. xlWorkSheet = Nothing
    20. End If
    21. If Not xlWorkBook Is Nothing Then
    22. Marshal.FinalReleaseComObject(xlWorkBook)
    23. xlWorkBook = Nothing
    24. End If
    25. If Not xlWorkBooks Is Nothing Then
    26. Marshal.FinalReleaseComObject(xlWorkBooks)
    27. xlWorkBooks = Nothing
    28. End If
    29. If Not xlApp Is Nothing Then
    30. Marshal.FinalReleaseComObject(xlApp)
    31. xlApp = Nothing
    32. End If
    33. Else
    34. MessageBox.Show("Datei konnte nicht gefunden werden! " & ExcelFileName)
    35. End If
    36. End Sub
    Eigentlich sollte man Excel machen lassen. So kann es die Datei auch wieder einlesen.
    Wenn du die Datumse in deutsches Format konvertierst können da vermutlich EinleseFehler auftreten.

    Weiters wüsste ich nicht, wie man Excels Export-Funktion da beeinflussen kann.
    Zur Not müsste man die csv extra einlesen und konvertieren.
    Aber wie gesagt: Möglicherweise ist sie dann kaputt.
    Ich würde übrigens als Datum-Format immer etwas wählen, was sich auch in String-Darstellung richtig sortiert, und was auch auf Englisch richtig eingelesen wird:
    "yyyy-MM-dd"
    Von wieder einlesen schreibt der OT nichts, ich wüßte auch nicht, warum man ausgerechnet ein CSV-Format exportieren und dann wieder importieren sollte.
    Wenn ich für bestimmte Vorhaben Tabellen exportieren muss, dann wähle ich lieber Excel als CSV, weil aus einer Exce-Tabelle kann ich besser ableiten was der Anwender wollte, als aus einer CSV, die nachher nicht mehr alle Spalten oder zuviele Spalten aufweist. Da kann man *noch* mehr mit kaputt machen als mit Excel.
    Also warum man überhaupt CSV braucht wäre erst mal zu klären. Ansonsten ist was du beschreibst, nämlich CSV schreiben, wieder einlesen und bearbeiten, die Methode die man ansonsten auch per Google findet.

    Wenn es sich um eine Tabelle im Tabellenblatt des Workbooks handelt, würde ich es mit EPPlus auslesen, z.B: direkt in eine Datatable und aus dieser dann typisiert an eine dafür designte Klasse oder strreng typisiertes Dataset übergeben. Dann kann man serialiseren oder das Dataset dann mit dts.WriteXml rausschreiben.
    Hallo galnar,
    um die Fehlerursache einzugrenzen, würde ich folgende Schritte empfehlen:
    1. Wie sind deine Windows Einstellungen (Systemsteuerung --> Region) bezüglich der Anzeige eines Datums ?
    2. Wie sind die Einstellungen in Office bzw. Excel ?
    3. Aus der Spalte, aus der die Daten fehlerhaft übernommen werden, mal testweise ein paar Zellen auslesen: Value, Value2, NumberFormat, NumberFormatLocal, Formula, FormulaLocal

    Sollte sich wider Erwarten bei allen drei Punkten keine Auffälligkeit ergeben, so kannst du noch folgenden Workaround anwenden:
    - Die zu exportierende Tabelle kopieren und neu einfügen.
    - In der neuen Tabelle die Spalte mit den falschen Daten löschen.
    - Aus der alten Tabelle die Spalte mit den Daten in die neue Tabelle kopieren und an der richtigen Stelle einfügen. Hierbei darauf achten, das nicht alles (Werte, Schriftart, Formeln, etc.) übernommen wird, sondern NUR die Werte. Das kann man z.B. mit Range.PasteSpecial erreichen.
    - Alte Tabelle löschen, CSV Export durchführen.

    Viele Grüße,
    Zorroot

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „zorroot“ ()