www.mikrocontroller.net

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


Autor: Benjamin Kley (kleybenny)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Copy & Paste

Autor: Benjamin Kley (kleybenny)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch's mal mit 'cat'

Autor: Benjamin Kley (kleybenny)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was heißt cat?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
echo. > alle.csv
for %%a in (*.csv) DO call c:\util\copy2.bat %%a
und in copy2.bat steht:
copy alle.csv + %1 >> alle.csv

Vielleicht geht es auch direkt (in meiner etwas anders gestalteten 
Anwendung war die Aufteilung notwendig):
echo. > alle.csv
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! --

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benjamin Kley (kleybenny)
Datum:

Bewertung
0 lesenswert
nicht 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? :-)

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für EXCEL-Fragen mal hier schauen:

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

gruß hans

Autor: HildeK (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 :-):
echo. > alle.csv
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.

Autor: Benjamin Kley (kleybenny)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey super !!!!!!

Vielen Dank, hat spitze geklappt!!!!1

Genau was ich gesucht habe. Danke

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jason Dom (djay911)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: Jason Dom (djay911)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

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


Gruß

Jason

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for %%a in (*.csv) DO copy /b alle.csv+%%a alle.csv
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:
del alle.csv
type *.csv > alle.c
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+".)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mh wrote:
>
for %%a in (*.csv) DO copy /b alle.csv+%%a alle.csv
>
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:
echo > riesendatei.csv; for f in *.csv; do tail -n +1 "$f" >> riesendatei.csv; done

Autor: Jason Dom (djay911)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ADS-R-US (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.