Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: CSV import UTF-8

CSV import UTF-8
26.01.2021 15:40:21
Felix
Guten Tag,
das letzte Jahr bin ich gut alleine zurecht gekommen, allerdings komme ich heute leider wirklich nicht weiter.
Es geht darum, dass ich ein CSV datei importieren muss und mir im Normalfall die Umlauet zerschossen werden.
Folgende Lösung habe ich gefunden und angepasst. Aber ich glaube ich habe ein Problem mit dem Zeilenumbruch.
Excel hört leider nach der ersten zeile auf. Ich habe auch absolut keine Idee mehr woran es liegen könnte:

Sub DatenBesorgen()
'Daten aus der CSV in die Excel kopieren
Dim DateiName As String
Dim ReplacePrep As String
Dim LineFromFile As String
Dim LineItems As Variant
Dim row_number As Long
Dim objStream As Object
DateiName = "C:\Users\f_froelich\Desktop\Samsara Berichte\(Samsara)_Fahrtverlaufsbericht_-   _
_
_
_
_Rudolph_Logistik__Jan_19_2021_-_Jan_26_2021.csv"
Set objStream = CreateObject("ADODB.Stream")
objStream.Charset = "utf-8"
objStream.Open
objStream.LoadFromFile (DateiName)
row_number = 1
Do Until objStream.EOS                       'Gesammtes TextDok durchgehen
LineFromFile = objStream.ReadText(-2)    'Zeile aus Quelldatei einlesen
LineItems = Split(LineFromFile, ",")
Worksheets("Tabelle1").Cells(row_number, 1).Value = LineItems(0)
Worksheets("Tabelle1").Cells(row_number, 2).Value = LineItems(1)
Worksheets("Tabelle1").Cells(row_number, 3).Value = LineItems(2)
Worksheets("Tabelle1").Cells(row_number, 4).Value = LineItems(3)
Worksheets("Tabelle1").Cells(row_number, 5).Value = LineItems(4)
Worksheets("Tabelle1").Cells(row_number, 6).Value = LineItems(5)
Worksheets("Tabelle1").Cells(row_number, 7).Value = LineItems(6)
Worksheets("Tabelle1").Cells(row_number, 8).Value = LineItems(7)
row_number = row_number + 1
Loop
Set objStream = Nothing
End Sub

Anbei auch die ersten drei Zeilen aus meiner CSV-Datei:
Fahrzeug,Fahrer,Fahrtbeginn,Beginnen bei,Fahrtende,Beenden bei,Fahrtdaüer,Dauer der Pause,Kilometer
KS-R 7154,Unassigned,"K 30, Salzgitter, NDS, 38239",Jan 19 11:21AM CET,"Beispiel, T, 07907",Jan 19 2:40PM CET,3h 18m,33m 12s,280.8
KS-R 7320,Unassigned,Hankook Tire Netherlands B.V.,Jan 19 12:56PM CET,Koller Kunststofftechnik GmbH,Jan 19 2:03PM CET,1h 7m,1h 32m,65.7
Vielen Dank vorab für eure Hilfe
Grüße Felix
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV import UTF-8
26.01.2021 15:54:50
peterk
Hallo
Ich vermute dass Dein CSV File kein CRLF als Lineseperator hat. Probier folgendes:

objStream.Charset = "utf-8"
objStream.LineSeparator = -1  '(CRLF)  das ist Default
oder
objStream.LineSeparator = 13  '(CR)  nur Carriage Return
objStream.LineSeparator = 10  '(LF)  nur Linefeed

Anzeige
AW: CSV import UTF-8
26.01.2021 15:59:00
Felix
Ich bin gerade noch einmal mit dem Debugger in Einzelschritten durchgegangen und er schmeißt mich nach einer Runde an dieser Stelle objStream.EOS aus dem loop
AW: CSV import UTF-8
26.01.2021 16:01:50
Felix
Vielen dank, mit:

objStream.LineSeparator = 10  '(LF)  nur Linefeed 
hat es funktioniert
Anzeige
AW: CSV import UTF-8
26.01.2021 16:05:25
Felix
Allerdings gibt es noch ein weiteres Problem. In der Originaldateei gibt es eine Adresse, die in "" markiert ist und Komma enthält. Der Code liest diese Komma jedoch leider als Trennzeichen. Gibt e dafür auch noch einen Trick?
AW: CSV import UTF-8
26.01.2021 16:33:34
peterk
Hallo
Mit einem kleinen Trick

' zuerst nach " splitten
LineItems = Split(LineFromFile, """")
For i = LBound(LineItems) + 1 To UBound(LineItems) Step 2
' ersetze das , durch |
LineItems(i) = Replace(LineItems(i), ",", "|")
Next i
' fügen wieder alles zusammem , die " bleiben erhalten
LineFromFile = Join(LineItems, """")
' jetzt nach , splitten
LineItems = Split(LineFromFile, ",")
' und im Falle des Falles | durch , ersetzen
Worksheets("Tabelle1").Cells(row_number, 1).Value = Replace(LineItems(0), "|", ",")

Anzeige
AW: CSV import UTF-8
26.01.2021 16:59:49
Felix
Vielen Dank, Sie sind mein Held des Tages
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

CSV Import in Excel mit UTF-8


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei mit UTF-8-Kodierung in Excel zu importieren, kannst du den folgenden VBA-Code verwenden. Dieser Code liest die Datei Zeile für Zeile ein und beachtet dabei die richtige Kodierung:

Sub DatenBesorgen()
    ' Daten aus der CSV in die Excel kopieren
    Dim DateiName As String
    Dim LineFromFile As String
    Dim LineItems As Variant
    Dim row_number As Long
    Dim objStream As Object
    DateiName = "C:\Users\dein_user\Desktop\deine_datei.csv"
    Set objStream = CreateObject("ADODB.Stream")
    objStream.Charset = "utf-8"
    objStream.LineSeparator = 10  '(LF) nur Linefeed
    objStream.Open
    objStream.LoadFromFile (DateiName)
    row_number = 1
    Do Until objStream.EOS
        LineFromFile = objStream.ReadText(-2)
        LineItems = Split(LineFromFile, ",")
        For i = LBound(LineItems) To UBound(LineItems)
            Worksheets("Tabelle1").Cells(row_number, i + 1).Value = LineItems(i)
        Next i
        row_number = row_number + 1
    Loop
    Set objStream = Nothing
End Sub

Achte darauf, die Datei-Pfade entsprechend anzupassen. Dieser Code nutzt ADODB.Stream, um sicherzustellen, dass die CSV-Datei im UTF-8-Format importiert wird.


Häufige Fehler und Lösungen

  1. Excel hört nach der ersten Zeile auf:

    • Stelle sicher, dass du den richtigen Line Separator verwendest:
      objStream.LineSeparator = 10  '(LF) nur Linefeed
  2. Umlaute werden falsch angezeigt:

    • Vergewissere dich, dass die CSV-Datei tatsächlich in UTF-8 kodiert ist. Eine falsche Kodierung kann zu fehlerhaften Zeichen führen.
  3. Kommas in Anführungszeichen:

    • Wenn deine CSV-Datei Kommas innerhalb von Anführungszeichen enthält, verwende folgende Methode, um sie zu verarbeiten:
      LineItems = Split(LineFromFile, """")
      For i = LBound(LineItems) + 1 To UBound(LineItems) Step 2
      LineItems(i) = Replace(LineItems(i), ",", "|")
      Next i
      LineFromFile = Join(LineItems, """")

Alternative Methoden

Eine alternative Methode zum Importieren von CSV-Dateien in Excel ist die Verwendung des Text Import Wizards:

  1. Gehe zu Daten > Aus Text/CSV.
  2. Wähle deine Datei aus und stelle sicher, dass du die Kodierung auf UTF-8 setzt.
  3. Klicke auf Laden, um die Daten in ein Arbeitsblatt zu importieren.

Praktische Beispiele

Hier ein Beispiel, wie man mit VBA eine CSV-Datei importiert, die Informationen über Fahrten enthält:

Sub FahrtenImport()
    ' Importiere Fahrten aus einer CSV-Datei
    ' Beispiel CSV: Fahrzeug,Fahrer,Fahrtbeginn,...
    ' ...
End Sub

Diese Methode ist besonders nützlich, wenn du regelmäßig Daten aus CSV-Dateien importieren musst.


Tipps für Profis

  • Fehlerbehebung: Nutze den Debugger in VBA, um herauszufinden, wo dein Code möglicherweise nicht funktioniert.
  • Performance: Verwende Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual, um die Laufzeit deines Codes zu optimieren, insbesondere bei großen CSV-Dateien.
  • Verwende ADO für den Import: Wenn du mit großen Datenmengen arbeitest, kannst du ADO verwenden, um die Leistung zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine CSV-Datei in UTF-8 kodiert ist? Überprüfe die Datei in einem Texteditor wie Notepad++ und stelle sicher, dass die Kodierung auf UTF-8 eingestellt ist.

2. Was ist der Unterschied zwischen CRLF, CR und LF? CRLF (Carriage Return + Line Feed) wird häufig in Windows verwendet, während LF (Line Feed) in Unix/Linux-Umgebungen verwendet wird. CR (Carriage Return) wird weniger häufig verwendet.

3. Warum funktioniert mein Code nicht, wenn ich die CSV-Datei mit Excel öffne? Excel hat seine eigenen Importmethoden und kann in einigen Fällen Probleme mit der Zeilenkodierung oder den Trennzeichen haben. Verwende VBA für mehr Kontrolle über den Importprozess.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige