私はLinuxでxlsxファイルをcsvファイルに変換する方法を探しています。
私は数百万行の処理を見ているので、私はPHP/Perlまたはそのようなものを使用したくないので、私は素早いものが必要です。私はxls2csvと呼ばれるUbuntuリポジトリ上のプログラムを見つけましたが、それは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秒かかったと魅力のように動作します。
複数のシートがある場合は、一度にすべてエクスポートすることも、一度にエクスポートすることもできます。
$ 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
ファイル名のスペースを処理します。
数年後にもう一度試してみましたが、うまくいきませんでした。 このスレッド はいくつかのヒントを与えますが、最も早い解決策はrootとして(またはSudo libreoffice
を実行して)実行することです。エレガントではありませんが、速いです。
Windowsでscalc.exeコマンドを使用する
.xlsx
ファイルに多数のシートがある場合は、-s
フラグを使用して必要なシートを入手できます。例えば:
xlsx2csv "my_file.xlsx" -s 2 second_sheet.csv
second_sheet.csv
はmy_file.xlsx
に2枚目のシートのデータを含みます。
もう1つの選択肢は、便宜上、小さな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コマンドラインを実行しても問題ない場合は、Apache POI HSSFの Excel Extractor を使用して実行できます。これには main
メソッドがあり、これはコマンドライン抽出プログラム です。これはすべてをすべてダンプするようです。彼らは この例ではCSV に変換することを指摘しています。実行する前にコンパイルする必要がありますが、main
メソッドも含まれているので、動作させるためにそれ自体コーディングする必要はありません。
飛ぶかもしれないが反対側でいくらかの作業を必要とするもう一つのオプションはあなたのExcelファイルをExcel XMLデータまたは XMLスプレッドシート としてフォーマットする最近。それはあなたがそれをあなたが望むようにスライスしてさいの目に切る機会の全く新しい世界を開くでしょう。
他の人が言ったように、libreoffice
はxlsファイルをcsvに変換することができます。私にとっての問題はシートの選択でした。
この libreoffice Pythonスクリプト は、1枚のシートをCSVに変換するのに適しています。
使い方は次のとおりです。
./libreconverter.py File.xls:"Sheet Name" output.csv
唯一のマイナス面は(私の側では)--headless
が機能していないようだということです。 LOウィンドウが1秒間表示されてから終了します。
それは私にとっては大丈夫です、それは仕事を迅速にする唯一のツールです。