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?
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.
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
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
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...)
>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! --
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.
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? :-)
>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.
Hey super !!!!!! Vielen Dank, hat spitze geklappt!!!!1 Genau was ich gesucht habe. Danke
>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
Wenn du Linux/Cygwin/Mingw zur Hand hast:
1 | for f in *.csv; do tail -n +1 "$f" >> riesendatei.csv; done |
Hi... Leider kein Linux zur Verfügung, aber danke für den Tip. Gruß Jason
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.
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+".)
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 |
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
@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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.