Gibt es eine Möglichkeit, im Idealfall über die Befehlszeile, mehrere CSV-Dateien in eine .xls-Tabelle mit mehreren Blättern zu konvertieren?

14

Gibt es eine Möglichkeit, im Idealfall über die Befehlszeile, mehrere CSV-Dateien in eine .xls-Tabelle mit mehreren Blättern zu konvertieren?

Wenn es keine CLI-Lösung gibt, wäre es gut zu wissen, ob es eine API gibt, die im Idealfall in awk oder pascal funktioniert, aber, falls dies nicht der Fall ist, in so ziemlich allem.

Peter Brooks
quelle
ssconvert, von Maythux erwähnt, ist ein Begleitbefehl zu Gnumeric, der standardmäßig auf einem Ubuntu Desktop-System installiert wird, jedoch nicht auf einer Serverversion.
Arronical
Angesichts der Tatsache, dass Excel CSV in eine .xlsDatei lädt, können Sie Folgendes tun:cat *.csv > file.xls
ash
Versuchen Sie dies
Lety
1
ssconvert macht den Trick perfekt. Was ich brauchte, war, jede CSV-Datei in einem separaten Blatt zu haben. Mit cat gelingt das nicht. ssconvert macht es.
Peter Brooks
@ash csv und xls sind unterschiedliche Formate. Das Catting einer Reihe von csvs in eine Datei und das Umbenennen von xls funktionieren überhaupt nicht, da csvs nicht mehrere Blätter unterstützen, sodass nur eine lange csv erstellt wird, und da csv ein Nur-Text-Format ist xls ist ein binäres Format
chiliNUT

Antworten:

16

Sie können den Befehl ssconvert verwenden .

ssconvert example.csv example.xls

Um dies für mehrere Dateien zu tun, müssen Sie eine Bash-Schleife über CSV-Dateien erstellen und die Aufgabe erledigen. Hier ein Hinweis:

for i in *.csv; do ssconvert "$i" "${i%.*}".xls; done

BEARBEITEN:

Zum Konvertieren und Zusammenführen in eine einzige xls-Datei können Sie auch weiterhin ssconvert verwenden.

ssconvert --merge-to=output.xls file1.csv file2.csv ....

oder einfach

ssconvert --merge-to=output.xls *.csv 
Maythux
quelle
1
Es ist wichtig, die Variablen in Anführungszeichen zu setzen, da "$i" "${i%.*}".xlssonst jeder Dateiname, der ein Leerzeichen enthält, den Befehl unterbricht (und möglicherweise eine nicht verwandte Datei überschreibt).
Paddy Landau