Ordner mit mehreren csv. Dateien in eine Excel Datei zusammenfassen
Hallo,
ich stehe vor folgendem Problem.
Ich möchte enorme Datenmengen in eine Excel, oder auch Access Datei zusammenfassen.
Ich habe mehrere Ordner mit jeweils über 7000 csv. Dateien, die innerhalb eines Ordners gleich aufgebaut sind (Marktdaten verschiedener Jahre).
Ich benötige ein Makro, welches sehr ressourcensparend die csv. Dateien einliest und die ursprünglichen Ordner, jeweils in eine einzelne Arbeitsmappe integriert.
Hierfür sollen die csv. Datein eingelesen und untereinander aufgelistet werden.
Die csv. Dateien beinhalten in der ersten Zeile jeweils die Überschriften, die nicht jedes Mal mitkopiert werden sollen.
Zudem soll die Zeile 6596 nicht mitkopiert werden, da diese nur die Anzahl der gesamten Zeilen anzeigt. Die durch das Löschen entstandenen, leeren Zeilen, sollen gelöscht werden, sodass eine nahtlose Datentabelle entsteht.
Die Spaltentrennung erfolgt mit Semikolons.
Über Ihre Hilfe bin ich sehr dankbar.
VG
Metal008
ich stehe vor folgendem Problem.
Ich möchte enorme Datenmengen in eine Excel, oder auch Access Datei zusammenfassen.
Ich habe mehrere Ordner mit jeweils über 7000 csv. Dateien, die innerhalb eines Ordners gleich aufgebaut sind (Marktdaten verschiedener Jahre).
Ich benötige ein Makro, welches sehr ressourcensparend die csv. Dateien einliest und die ursprünglichen Ordner, jeweils in eine einzelne Arbeitsmappe integriert.
Hierfür sollen die csv. Datein eingelesen und untereinander aufgelistet werden.
Die csv. Dateien beinhalten in der ersten Zeile jeweils die Überschriften, die nicht jedes Mal mitkopiert werden sollen.
Zudem soll die Zeile 6596 nicht mitkopiert werden, da diese nur die Anzahl der gesamten Zeilen anzeigt. Die durch das Löschen entstandenen, leeren Zeilen, sollen gelöscht werden, sodass eine nahtlose Datentabelle entsteht.
Die Spaltentrennung erfolgt mit Semikolons.
Über Ihre Hilfe bin ich sehr dankbar.
VG
Metal008
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 285960
Url: https://administrator.de/forum/ordner-mit-mehreren-csv-dateien-in-eine-excel-datei-zusammenfassen-285960.html
Ausgedruckt am: 22.05.2025 um 10:05 Uhr
23 Kommentare
Neuester Kommentar

Moin Metal008,
Suchfunktion benutzen, please:
Gruß jodel32
Suchfunktion benutzen, please:
- Alle CSV-Dateien in einem Ordner mit einem VBA Makro einlesen
- Alle CSV-Dateien in einem Ordner mit einem VBA Makro einlesen Teil 2
- Excel Makro um CSV Dateien auszuwerten und gesammelt anzuzeigen.
Gruß jodel32

Geht doch viel schneller mit Powershell
Gruß jodel32
$folder = 'C:\csv'
$out = 'C:\zusammenfassung.csv'
gci $folder -Filter *.csv | %{
$raw = ((gc $_.FullName) | select -Skip 7)
$raw[0..($raw.GetUpperBound(0)-1)] | ConvertFrom-CSV -Delimiter ";" -Header 1,2,3,4,5,6,7 | export-csv $out -Append -Delimiter ";" -Notype -Encoding UTF8
}

Zitat von @Metal008:
Danke für die rasche Antwort.
für ein paar Dateien hat es geklappt. Nun bekomme ich folgende Fehlermeldung:
Wenn ich -Force hinzufüge bleiben einige Spalten der Zusammenfassung einfach leer. Wie mir schein weisen einige csv Dateien Formatierungsfehler auf. (aus Zahlen wurde Ein Datum).
Zudem erzeugt der Code aus ursprünglich ca. 800 Zeilen nun über 1000 Zeilen
Der Code geht davon aus das in Zeile 8 die Überschriften der Spalten stehen ! Ist das nicht der Fall und dort stehen schon die eigentlichen Daten musst du die Überschriften der Spalten dem Befehl Convertfrom-CSV mit dem Parameter -Header 1,2,3,4,5,6 mitteilen. in diese, Beispiel hat dann die CSV 6 Spalten durchnummeriert von 1 bis 6.Danke für die rasche Antwort.
für ein paar Dateien hat es geklappt. Nun bekomme ich folgende Fehlermeldung:
Wenn ich -Force hinzufüge bleiben einige Spalten der Zusammenfassung einfach leer. Wie mir schein weisen einige csv Dateien Formatierungsfehler auf. (aus Zahlen wurde Ein Datum).
Zudem erzeugt der Code aus ursprünglich ca. 800 Zeilen nun über 1000 Zeilen
Da du hier keine Beispieldaten postest und ob die CSV im Inhalt (Spaltenmässig abweichen)
Deswegen läuft bei dir bestimmt der Code von @colinardo auch nicht weil du uns irgendwo was verschweigst, oder deine CSV nicht konsistent aufgebaut sind oder Fehler enthalten. Das können wir hier ja leider nicht sehen!

Code ist oben angepasst so das alle CSV 7 Spalten haben müssen
Bitte keine externen Bilder verlinken, das Forum hat eine Bilderuploadfunktion im Ursprungsbeitrag!
Die Überschrift Zeile 1-7 und die Prüfsumme (Die letzte Zeile mit Daten) soll nicht mitkopiert werde.
Das war schon implementiert ...Bitte keine externen Bilder verlinken, das Forum hat eine Bilderuploadfunktion im Ursprungsbeitrag!

Get-Date '2012-01-01T00:15:00+01:00' -Format 'dd-MM-yyyy HH:mm:ss'

Zitat von @Metal008:
Ich hatte gegooglet, habe jedoch nichts gefunden. Ich habe versucht den Code in Excel zu verwenden
Geht nicht ist ja auch PS CodeIch hatte gegooglet, habe jedoch nichts gefunden. Ich habe versucht den Code in Excel zu verwenden
und in den powershellcode einzufügen.
beides ging nicht.
"Was" ging nicht ? Mein Code oben geht einwandfrei ... Du musst schon sagen was du machen willst ...beides ging nicht.
Beispiel:
Wenn in Spalte 7 das Ursprungs-Datum mit TZ Info steht wird es so in dein gewünschtes Format umgewandelt:
$folder = 'C:\csv'
$out = 'C:\zusammenfassung.csv'
gci $folder -Filter *.csv | %{
$raw = ((gc $_.FullName) | select -Skip 7)
$csv = $raw[0..($raw.GetUpperBound(0)-1)]| ConvertFrom-CSV -Delimiter ";" -Header 1,2,3,4,5,6,7
$csv | %{$_.7 = get-date $_.7 -Format 'dd-MM-yyyy HH:mm:ss'}
$csv | export-csv $out -Append -Delimiter ";" -Notype -Encoding UTF8
}

Jedoch behält er das Datum bei. (habe im Code aus der 7 eine 6 gemacht).
Nö, geht hier problemlos.Für ein eingedeutschtes Excel nimmst du als Format einfach dd.MM.yyyy HH:mm:ss
Zudem wäre es wünschenswert, wenn Spalte 4 als (Zahlen Werte) importiert wird,
Einfach ein Replace des Kommas durch einen Punkt machen http://ss64.com/ps/replace.html

$folder = 'C:\Ordner'
$outAT = 'C:\Ausgabe\AT.csv'
$outDE = 'C:\Ausgabe\DE.csv'
gci $folder -Filter *.csv -recurse | %{
$raw = ((gc $_.FullName) | select -Skip 7)
$csv = $raw[0..($raw.GetUpperBound(0)-1)]| ConvertFrom-CSV -Delimiter ";" -Header 1,2,3,4,5,6,7
$csv | %{$_.6 = get-date $_.6 -Format 'dd.MM.yyyy HH:mm:ss'}
$csv | ?{$_.2 -eq 'AT'} | export-csv $outAT -Append -Delimiter ";" -Notype -Encoding UTF8
$csv | ?{$_.2 -eq 'DE'} | export-csv $outDE -Append -Delimiter ";" -Notype -Encoding UTF8
}

Uups da hab ich vergessen die alte Export-Zeile rauszunehmen ...ist korrigiert. Zu viel am Hut heute :...hechel

Außerdem werden die Daten aus der CSV Datei des "obersten Ordners" dreimal in die neue erzeugte Datei geladen.
Wenn du die CSV im gleichen Ordner ausgibst den du ausliest, wie deine vorgerigen Pfade aussahen, kein Wunder...Die anderen Sachen kannst du mit minimalem lesen der Doku selber herausfinden, anstatt uns hier deine Arbeit machen zu lassen!

Zitat von @Metal008:
Ich benötige einen Filter, der doppelte Einträge in Spalte 3 (TimeStamp) erkennt
select -Unique ist dein Freund für doppelte EinträgeIch benötige einen Filter, der doppelte Einträge in Spalte 3 (TimeStamp) erkennt
und nach Aktualität( Spalte 5 und 6 )untersucht. In die neue csv. Datei soll jeweils nur der aktuelle Timestamp, anhand von Spalte 5 und 6 geschrieben werden.
sort-object ist dein Freund