Linuxでxlsxファイルをcsvファイルに変換する方法を探しています。
数百万行の処理を検討しているので、PHP / Perlなどは使いたくないので、すぐに何かが必要です。Ubuntuリポジトリでxls2csvというプログラムを見つけましたが、変換されるのはxls(Office 2003)ファイル(現在使用しているもの)のみですが、新しいExcelファイルのサポートが必要です。
何か案は?
Gnumericスプレッドシート アプリケーションには、さまざまなスプレッドシート形式間で変換できるssconvertというコマンド ライン ユーティリティが付属しています。
$ ssconvert Book1.xlsx newfile.csv
Using exporter Gnumeric_stf:stf_csv
$ cat newfile.csv
Foo,Bar,Baz
1,2,3
123.6,7.89,
2012/05/14,,
The,last,Line
Ubuntu にインストールするには:
apt-get install gnumeric
Mac にインストールするには:
brew install gnumeric
LibreOfficeでこれを行うことができます:
libreoffice --headless --convert-to csv $filename --outdir $outdir
理由はわかりませんが、これを sudo で実行する必要があるかもしれません。次の行を sudoers ファイルに追加することで、パスワードを必要とせずに LibreOffice を sudo で動作させることができます。
users ALL=(ALL) NOPASSWD: libreoffice
すでにデスクトップ環境をお持ちの場合は、Gnumeric / LibreOffice がうまく機能すると確信していますが、ヘッドレス サーバー (Amazon Web Services など) では、多数の依存関係をインストールする必要があります。
このPythonの代替案を見つけました:
https://github.com/dilshod/xlsx2csv
$ easy_install xlsx2csv
$ xlsx2csv file.xlsx > newfile.csv
インストールに 2 秒かかり、魅力のように機能します。
複数のシートがある場合は、すべてを一度にエクスポートすることも、一度に 1 つずつエクスポートすることもできます。
$ xlsx2csv file.xlsx --all > all.csv
$ xlsx2csv file.xlsx --all -p '' > all-no-delimiter.csv
$ xlsx2csv file.xlsx -s 1 > sheet1.csv
彼はまた、Bash、Python、Ruby、および Java で構築されたいくつかの代替手段へのリンクも示しています。
bash では、この libreoffice コマンドを使用して、現在のディレクトリにあるすべての xlsx ファイルを変換しました。
for i in *.xlsx; do libreoffice --headless --convert-to csv "$i" ; done
実行する前に、Libre Office の開いているインスタンスをすべて閉じてください。そうしないと、サイレントに失敗します。
このコマンドは、ファイル名のスペースを処理します。
数年後に再試行しましたが、うまくいきませんでした。このスレッドはいくつかのヒントを提供しますが、最も迅速な解決策は root として実行する (または を実行するsudo libreoffice
) ことでした。エレガントではありませんが、迅速です。
Windows でコマンド scalc.exe を使用します。
別のオプションは、便宜上、小さな bash ラッパーを介して R を使用することです。
xlsx2txt(){
echo '
require(xlsx)
write.table(read.xlsx2(commandArgs(TRUE)[1], 1), stdout(), quote=F, row.names=FALSE, col.names=T, sep="\t")
' | Rscript --vanilla - $1 2>/dev/null
}
xlsx2txt file.xlsx > file.txt
ssconvert と呼ばれるコマンドライン ユーティリティが付属しているGnumericスプレッドシート アプリケーションを使用するのは、非常に簡単です。
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
これで完了です。
Javaコマンドラインを実行しても問題がない場合は、ApachePOIHSSFのExcelExtractorを使用して実行できます。コマンドラインエクストラクタと言うメソッドがありますmain
。これはただすべてを捨てているようです。彼らは、CSVに変換するこの例を指摘しています。実行する前にコンパイルする必要がありますが、main
メソッドもあるので、動作させるためにコーディング自体をあまり行う必要はありません。
飛ぶかもしれないが、もう一方の端でいくつかの作業が必要になる別のオプションは、ExcelファイルをExcelXMLデータまたは最近のMS呼び出しのXMLスプレッドシートとして提供することです。それはあなたがそれをあなたが望むようにスライスしてさいの目に切るための全く新しい機会の世界を開くでしょう。
他の人が言ったように、libreoffice
xlsファイルをcsvに変換できます。私にとっての問題は、シートの選択でした。
このlibreoffice Python スクリプトは、単一のシートを CSV に変換する際にうまく機能します。
使用法は次のとおりです。
./libreconverter.py File.xls:"Sheet Name" output.csv
唯一の欠点 (私の側で) は、それが機能して--headless
いないように見えることです。1 秒間表示されてから終了する LO ウィンドウがあります。
それは私には問題ありません。仕事を迅速に行う唯一のツールです。