mehrere CSV Dateien in eine Excel Datei zusammenführen

OP #1199107
servus,

ich hoffe wirklich ihr könnt mir helfen, ich bin nämlich fast schon am 
verzweifeln. Ich habe des öfteren mehrere csv Dateien und möchte diese 
alle in einer Excel Datei haben. Alle haben die gleiche Formatierung. 
Das heißt alle haben zum Beispiel oben 5 Spalten und darunter mehrere 
Zeilen mit Werten. Ich will eine Datei machen, in der alle Werte 
untereinander stehen, ohne jede Datei öffnen zu müssen und in die eine 
Datei einzufügen. Weiß jemand wie man das machen kann?
OP
Danke, das habe ich auch gewusst :-) Aber damit kann ich nicht viel 
anfangen, wie gesagt ich nuss die Arbeit öfter machen und will nicht 
jedes mal 30 CSV Dateien in Excel öffnen und dann in eine Excel Datei 
ziehen müssen. Das muss doch irgendwie schneller gehen oder? z.B. über 
VBA oder so.
Gast
Das ist ein Konsolenprogramm. Standart unter UNIX Derivaten. Es gibt 
bestimmt eine Portierung auf Windows. Vieleicht geht es auch so:

copy /b datei1+datei2 datei1und2
Gast
In Excel ein Arbeitblatt öffnen und dann die CSV-Dateien mit Extra-
externe Dateien-einlesen (oder so ähnlich) eine nach der anderen
einlesen. Datei wird abei ausgewählt, Einfügeposition ist auch
wählbar.

Wenn es immer die gleichen Dateien an den gleichen Position sein
sollen , denn Makro-Rekorder verwenden und das ganze einmal
kpl. aufzeichnen. Danach reicht dann ein Makroaufruf.

Das Makro läßt sich dann auch in VBA abändern.

gruß hans
Gast
copy (DOS-Programm) kann Dateien verbinden.
einfach mal "copy /?" in der DOS-Box eingeben und sich die Hinweise 
durchlesen.
Es müsste mit
copy Datei1+Datei2+Datei3 DateiAlle

gehen (Vermutung meinerseits...)
Gast
>copy /b datei1+datei2 datei1und2
/b wirst du bei csv nicht brauchen - es schadet aber auch nichts.

In einem Batch könnte man das sogar rekursiv machen. So etwa in der Art:
1
echo. > alle.csv
2
for %%a in (*.csv) DO call c:\util\copy2.bat %%a
und in copy2.bat steht:
1
copy alle.csv + %1 >> alle.csv

Vielleicht geht es auch direkt (in meiner etwas anders gestalteten 
Anwendung war die Aufteilung notwendig):
1
echo. > alle.csv
2
for %%a in (*.csv) DO copy alle.csv + %%a >> alle.csv

Zuerst wird eine leere Datei alle.csv erstellt. Dann werden alle im 
Verzeichnis stehenden CSV-Dateien nacheinander an 'alles.csv' angehängt. 
Die Reihenfolge mag aber von der ursprünglichen Windows-Dateisortierung 
abhängen.

-- ich habe dies jetzt nicht ausprobiert! --
Gast
Ergänzung:
ich habe mir irgendwann mal einen Link erstellt mit dem folgenden 
Kommando:

%windir%\hh.exe ms-its:%windir%\Help\ntcmds.chm::/ntcmds.htm

Dahinter verbirgt sich eine ausführliche Hilfe zu den Batchkommandos, 
die vermutlich (hoffentlich!) auf jedem XP-System bereits mitinstalliert 
ist.
OP
Vielen Dank für eure Antworten, ich verstehe nur leider nicht ganz genau 
wie ich das mahcen soll. Ich bin eher ein Laie. Wie funktioniert das 
genau mit dem Batch? Was muss ich machen? Welche Datei erstellen? :

> In einem Batch könnte man das sogar rekursiv machen. So etwa in der Art:
> [pre]
> echo. > alle.csv
> for %%a in (*.csv) DO call c:\util\copy2.bat %%a...............

Könnte mir das jemand bitte nochmal genauer erklären? :-)
Gast
>Könnte mir das jemand bitte nochmal genauer erklären? :-)
Sorry, gestern waren noch einige Fehler drin - die Idee funktioniert 
aber.
Getestet lautet der Batchfile (join_csv.bat) so - und jetzt funktioniert 
das auch :-):
1
echo. > alle.csv
2
for %%a in (*.csv) DO copy /b alle.csv+%%a alle.csv

Zeile 1 löschte eine alte Datei 'alle.csv' indem sie einfach eine neue 
leere erstellt. Dort könntest du auch bereits die Spaltenüberschriften 
schreiben.

Zeile 2 sucht im aktuellen Verzeichnis alle Dateien mit der Endung *.csv 
und kopiert diese hinter 'alle.csv'. Da sich das solange wiederholt, bis 
alle vorhandenen Dateien mit der Endung *csv bearbeitet sind, hast du am 
Ende das Ergebnis in 'alle.csv'.

Ich habe dir mal drei kleine CSV-Dateien angehängt und den Batchfile 
join_csv.bat ebenso. Speichere die Dateien in einem Ordner und starte 
den Batchfile. Danach entsteht 'alle.csv'. Du kannst dir die Dateien in 
einem Texteditor oder direkt in Excel anschauen.
Angehängte Dateien:
Gast
>Genau was ich gesucht habe. Danke
Man tut was man kann :-)

Übrigens, wenn du statt

  echo. > alle.csv

die Zeile

  echo Spalte1;Spalte2;Spalte3;Spalte4 > alle.csv

schreibst, dann wird die erste Zeile zur Spaltenüberschrift.
Hi HildeK...

Genau sowas habe ich schon länger gesucht.
Klappt alles super.
Eine Frage hätte ich noch zu der Batchdatei:

Kann man es so erweitern, dass immer ab Zeile 2 der CSV-Dateien gelesen 
wird?
Bei mir hat jede csv eine gleichbeleibende Überschrift.


Gruß

Jason
Gast
Du brauchst dazu kein Linux. Installiere Msys oder UnxUtils, dann hast
o.g. tail und viele andere nützliche Tools zur automatisierten
Verarbeitung von Textdateien (sed, awk, split diff, grep und wie sie
alle heißen) auch unter Windows zur Verfügung. Die genannten Pakete
tragen im Vergleich zu Cygwin überhaupt nicht dick auf und sollten
deswegen eigentlich auf keinem Windows-Rechner fehlen.
Gast
1
for %%a in (*.csv) DO copy /b alle.csv+%%a alle.csv
1
for f in *.csv; do tail -n +1 "$f" >> riesendatei.csv; done

Vorsicht, *.csv beinhaltet auch alle.csv  bzw. riesendatei.csv. Die 
Datei wird also in sich selber kopiert! (Und es ist nicht vorauszusagen 
wie voll sie in dem Moment ist.)

Ich mache so etwas immer so:
1
del alle.csv
2
type *.csv > alle.c
3
ren alle.c alle.csv

Also erst löschen, dann alles in eine .c-Datei kopieren, die dann in 
*.csv umbenannt wird. (Die mittlere Zeile macht das gleiche wie 
"for...copy+".)
Gast
mh wrote:
>
1
for %%a in (*.csv) DO copy /b alle.csv+%%a alle.csv
>
1
for f in *.csv; do tail -n +1 "$f" >> riesendatei.csv; done
>
> Vorsicht, *.csv beinhaltet auch alle.csv  bzw. riesendatei.csv. Die
> Datei wird also in sich selber kopiert! (Und es ist nicht vorauszusagen
> wie voll sie in dem Moment ist.)
Zumindest unter Linux wird der Ausdruck '*.csv' vorher bewertet, was 
'Rekursionen' ausschließt. Dass man 'riesendatei.csv' vorher löschen 
sollte, hab ich mal vorausgesetzt... sonst halt:
1
echo > riesendatei.csv; for f in *.csv; do tail -n +1 "$f" >> riesendatei.csv; done
Gast
@Jason Dom
>Kann man es so erweitern, dass immer ab Zeile 2 der CSV-Dateien gelesen
>wird?
Da wüsste ich jetzt keine Antwort als Batch. Falls ich die Anforderung 
hätte, würde ich ein kleines C-Progrämmchen schreiben, das mir beim 
Lesen der Dateien die erste Zeile entfernt.
Probier es aber mal mit dem 'tail' aus den obigen Vorschlägen.

@mh
>Vorsicht, *.csv beinhaltet auch alle.csv  bzw. riesendatei.csv. Die
>Datei wird also in sich selber kopiert! (Und es ist nicht vorauszusagen
>wie voll sie in dem Moment ist.)
Hatte ich zunächst auch gedacht, aber während des Batchlaufs scheint das 
kein Problem zu sein. Es dürfte sich genauso verhalten, wie es Sven P. 
von Linux her kennt.

>Ich mache so etwas immer so:
> del alle.csv

Klar muss die alte Summendatei zuerst gelöscht werden. Meine erste Zeile 
löscht die alte 'alle.csv' ja auch, indem es eine neue, leere erstellt:
  echo. > alle.csv
als Leerzeile oder mit Inhalt:
  echo Spalte1;Spalte2;Spalte3;Spalte4 > alle.csv

Dein Vorschlag ist ja noch einfacher - allerdings kann bei meinem der 
Befehl 'copy /b alle.csv+%%a alle.csv' durch jeden anderen ersetzt 
werden und so auch andere Aufgaben auf alle Files eine Filegruppe 
angewandt werden. Beispiel:
   for %%a in (*.htm) DO call c:\util\batchprg.bat %%a

führt dann für alle *.HTM-Dateien nacheinander die Aufrufe
   batchprg.bat datei1.htm
   batchprg.bat datei2.htm
usw. aus.
Gast
HI,

frage warum funktioniert dies nicht mit folgenden csv datein?

Datei 1
2009-09-11-13-12-22
Datei 2
2009-09-12-12-12-21


nur durchumbenennen funktioniert das Bat file.
Gast
Um Keyword Planner-Abfragen "Keyword Planner 2015-02-01 at 01_39_33.csv" 
oder Ähnliches zusammen zu führen muss man die Leerzeichen aus den 
Dateinamen entfernen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.