Ich muss alle Blätter einer einzelnen XLS / XLSX-Datei in eine CSV-Datei konvertieren. Dies erfolgt für alle XLS-Dateien in allen Verzeichnissen und Unterverzeichnissen (rekursiv).
Schritt 1 : Holen Sie sich die Blattnamen aller .xls in eine .csv mit:
for file in $(find . -name '*.xls' -o -name '*.xlsx');do in2csv -n "$file" > ${file%.xls}-sheetnames-list.csv; done
filename-sheetnames-list.csv
kann als Liste dienen:
sheetname1
sheetname2
sheetname3
Schritt 2 : Der Code zum Konvertieren eines bestimmten Blattes in eine CSV-Datei mit in2csv lautet:
in2csv --sheet "SHEETNAME" filename.xls > filename-SHEETNAME.csv
Wie kann ich jeden Blattnamen in einer .xls / x-Datei abrufen und jedes Blatt separat für alle Verzeichnisse schreiben, die eine .xls / x enthalten?
in2csv --write-sheets "-" filename.xls > filename-sheet1.csv filename-sheet2.csv ....
Gibt die Ausgabe nur auf sheet1.csv aus, nicht sicher, wie alle Blätter daraus abgerufen werden sollen.
command-line
csv
xls
csheth
quelle
quelle
find
jedem.xls{,x}
Schleifen durchlaufen-exec
?Antworten:
Sie können einfach eine Schleife in eine andere Schleife einfügen.
Verwenden Sie nicht
for
mitfind
Ergebnissen, um Fehler zu vermeiden .quelle
.xls
in2csv --write-sheets "-" filename.xls > sheetname.csv
gibt nur das erste blatt. Ich weiß nicht, welche zusätzlichen Informationen ich hinzufügen soll, um alle Blätter zu schreiben. Das soll uns Hinweise geben, um Ihren Code zu korrigieren.pip install csvkit -U
. Ich denke, die Art und Weise, wie es funktioniert, ist nicht das, was Sie mögen. Mit dem einfachen Skript ab der ersten Option haben Sie mehr Möglichkeiten, die Ausgabe und die Dateinamen usw. zu steuern--write-sheets
Vielleicht können Sie diese alternative Option als andere Antwort festlegen ... Ich werde dann die erste Option als Antwort akzeptieren. Danke @RoVoÜberspringen der Suche und Verwendung von Bash:
quelle
filename-{}.csv
enthält keine Daten. Ich bin ein Neuling und kann den Fehler nicht finden, indem ich das Skript bearbeite und nachlese. Etwas Hilfe?xargs
. Korrigiert, jetzt nicht mehr so elegant.xargs
und>
ist böse :-P. Deshalb bevorzuge ich eine andere Schleife, die weniger fehleranfällig ist.csvkit version> 1.0.2 verfügt über eine integrierte Funktion zum Schreiben aller Blätter:
Sie können also Folgendes versuchen:
Hinweis:
Dies scheint nicht wie erwartet zu 100% zu funktionieren. Aber einen Versuch wert und da dies die erste Version mit dieser Option ist, ist die Implementierung in zukünftigen Versionen möglicherweise besser / einfacher.
quelle
Verwendung
Gnumeric
:um eine
csv
Datei pro Blatt zu erhalten.quelle