Forum: PC Hard- und Software mehrere CSV Dateien in eine Excel Datei zusammenführen


von Benjamin K. (kleybenny)


Lesenswert?

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?

von Dirk (Gast)


Lesenswert?

Copy & Paste

von Benjamin K. (kleybenny)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

Versuch's mal mit 'cat'

von Benjamin K. (kleybenny)


Lesenswert?

Was heißt cat?

von Gast (Gast)


Lesenswert?

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

von hans (Gast)


Lesenswert?

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

von STK500-Besitzer (Gast)


Lesenswert?

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...)

von HildeK (Gast)


Lesenswert?

>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! --

von HildeK (Gast)


Lesenswert?

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.

von Benjamin K. (kleybenny)


Lesenswert?

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? :-)

von hans (Gast)


Lesenswert?

Für EXCEL-Fragen mal hier schauen:

http://www.vba-beispiele.de/index.php

gruß hans

von HildeK (Gast)


Angehängte Dateien:

Lesenswert?

>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.

von Benjamin K. (kleybenny)


Lesenswert?

Hey super !!!!!!

Vielen Dank, hat spitze geklappt!!!!1

Genau was ich gesucht habe. Danke

von HildeK (Gast)


Lesenswert?

>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.

von Jason D. (djay911)


Lesenswert?

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

von Sven P. (Gast)


Lesenswert?

Wenn du Linux/Cygwin/Mingw zur Hand hast:
1
for f in *.csv; do tail -n +1 "$f" >> riesendatei.csv; done

von Jason D. (djay911)


Lesenswert?

Hi...

Leider kein Linux zur Verfügung, aber danke für den Tip.


Gruß

Jason

von yalu (Gast)


Lesenswert?

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.

von mh (Gast)


Lesenswert?

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+".)

von Sven P. (Gast)


Lesenswert?

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

von Jason D. (djay911)


Lesenswert?

Vielen Dank für die Tips...

Dann muss ich mir wohl Msys oder UnxUtils besorgen.
Und dann mal eure Tips ausprobieren.
Aber Danke für die schnelle Hilfe.

Gruß

Jason

von HildeK (Gast)


Lesenswert?

@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.

von Roman (Gast)


Lesenswert?

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.

von ADS-R-US (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.