Ich suche nach einer Möglichkeit, XLSX-Dateien unter Linux in CSV-Dateien zu konvertieren.
Ich möchte kein PHP / Perl oder ähnliches verwenden, da ich mehrere Millionen Zeilen verarbeiten möchte, also brauche ich etwas schnelles. Ich habe auf den Ubuntu-Repos ein Programm namens xls2csv gefunden, das jedoch nur xls-Dateien (Office 2003) konvertiert (die ich derzeit verwende), aber ich benötige Unterstützung für die neueren Excel-Dateien.
Irgendwelche Ideen?
Antworten:
Die gnumerische Tabellenkalkulationsanwendung enthält ein Befehlszeilenprogramm namens ssconvert , das zwischen verschiedenen Tabellenkalkulationsformaten konvertieren kann:
So installieren Sie unter Ubuntu:
So installieren Sie auf einem Mac:
quelle
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
Die LibreOffice-Methode könnte wahrscheinlich andere Formate verarbeiten, aber ich konnte sie nicht zum Laufen bringen (sie würde einfach jedes Mal eine leere Datei öffnen, selbst mit dem--headless
Argument).apt-get install gnumeric --no-install-recommends
. Der einzige Nachteil ist, dass viele Warnungen ausgelöst werden. GConf-WARNING **: Der Client konnte beim Ausführen keine Verbindung zum D-BUS-Dämon herstellen . Ein einfacherssconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
wird den Trick machen.-S
Flag mehrere Blätter schreibt. Jeder geht zu seiner eigenen Datei.ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
.Sie können dies mit LibreOffice tun:
Aus Gründen, die mir nicht klar sind, müssen Sie dies möglicherweise mit sudo ausführen. Sie können LibreOffice mit sudo arbeiten lassen, ohne ein Kennwort zu benötigen, indem Sie diese Zeile zu Ihrer sudoers-Datei hinzufügen:
quelle
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
hat für mich an OS X gearbeitet.--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
. Weitere Informationen finden Sie im Open Office-Wiki .Wenn Sie bereits eine Desktop-Umgebung haben, würde Gnumeric / LibreOffice sicher gut funktionieren, aber auf einem kopflosen Server (wie Amazon Web Services) sind Dutzende von Abhängigkeiten erforderlich, die Sie ebenfalls installieren müssen.
Ich habe diese Python-Alternative gefunden:
https://github.com/dilshod/xlsx2csv
Die Installation dauerte 2 Sekunden und funktioniert wie ein Zauber.
Wenn Sie mehrere Blätter haben, können Sie alle gleichzeitig oder einzeln exportieren:
Er verweist auch auf verschiedene Alternativen, die in Bash, Python, Ruby und Java erstellt wurden.
quelle
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg/EGG-INFO/top_level.txt'
) laufen . Jetzt, wo ich darüber nachdenke, habe ich den gleichen Fehler mitcsvkit
.xlsx2csv
Paket, sodass Sie es nicht manuell installieren müssen,easy_install
sondern Ihren Paketmanager verwenden können.sudo easy_install xlsx2csv
In bash habe ich diesen libreoffice-Befehl verwendet, um alle meine xlsx-Dateien im aktuellen Verzeichnis zu konvertieren:
Es kümmert sich um Leerzeichen im Dateinamen.
Einige Jahre später erneut versucht, und es hat nicht funktioniert. Dieser Thread gibt einige Tipps, aber die schnellste Lösung bestand darin, als root (oder a
sudo libreoffice
) auszuführen . Nicht elegant, aber schnell.Verwenden Sie den Befehl scalc.exe in Windows
quelle
scalc.exe
eher alslibreoffice
. Arbeitete heute für mich an der aktuellen stabilen LO-Version.Verwenden Sie csvkit
Einzelheiten finden Sie in den ausgezeichneten Dokumenten
quelle
Eine andere Möglichkeit wäre, R zur Vereinfachung über einen kleinen Bash-Wrapper zu verwenden:
quelle
Wenn die
.xlsx
Datei viele Blätter enthält,-s
kann das Flag verwendet werden, um das gewünschte Blatt abzurufen. Zum Beispiel:second_sheet.csv
würde Daten des 2. Blattes in enthaltenmy_file.xlsx
.quelle
Die Verwendung der Gnumeric- Tabellenkalkulationsanwendung, die mit einem Befehlszeilenprogramm namens ssconvert geliefert wird, ist in der Tat sehr einfach:
und du bist fertig!
quelle
Wenn Sie die Java-Befehlszeile ausführen können, können Sie dies mit dem Excel-Extraktor von Apache POI HSSF tun . Es gibt eine
main
Methode, die besagt, dass sie der Befehlszeilenextraktor ist . Dieser scheint einfach alles rauszuwerfen. Sie weisen auf dieses Beispiel hin, das in CSV konvertiert wird . Sie müssten es kompilieren, bevor Sie es ausführen können, aber es hat auch einemain
Methode, sodass Sie nicht viel Codierung per se durchführen müssen, damit es funktioniert.Eine andere Option, die möglicherweise fliegt, aber am anderen Ende einige Arbeiten erfordert, besteht darin, Ihre Excel-Dateien als Excel-XML-Daten oder XML-Tabellenkalkulation für alle MS-Aufrufe bereitzustellen, die heutzutage dieses Format aufrufen. Es eröffnet Ihnen eine ganz neue Welt von Möglichkeiten, es nach Ihren Wünschen zu schneiden und zu würfeln.
quelle
Wie andere sagten,
libreoffice
können XLS-Dateien in CSV konvertieren. Das Problem für mich war die Blattauswahl.Dieses libreoffice Python-Skript leistet hervorragende Arbeit bei der Konvertierung eines einzelnen Blattes in CSV.
Verwendung ist:
Der einzige Nachteil (an meinem Ende) ist, dass
--headless
es nicht zu funktionieren scheint. Ich habe ein LO-Fenster, das für eine Sekunde angezeigt wird und dann beendet wird.Das ist in Ordnung für mich, es ist das einzige Werkzeug, das die Arbeit schnell erledigt.
quelle