web-dev-qa-db-ja.com

コマンドラインでLinuxでxlsxをcsvに変換する

私はLinuxでxlsxファイルをcsvファイルに変換する方法を探しています。

私は数百万行の処理を見ているので、私はPHP/Perlまたはそのようなものを使用したくないので、私は素早いものが必要です。私はxls2csvと呼ばれるUbuntuリポジトリ上のプログラムを見つけましたが、それはxls(Office 2003)ファイル(私が現在使用している)のみを変換しますが、私は新しいExcelファイルのサポートが必要です。

何か案は?

218
user1390150

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
199
jmcnamara

LibreOfficeでこれを行うことができます。

libreoffice --headless --convert-to csv $filename --outdir $outdir

私には明らかではない理由で、あなたはSudoでこれを実行する必要があるかもしれません。 sudoersファイルに次の行を追加すると、パスワードを要求せずにLibreOfficeをSudoと連携させることができます。

users ALL=(ALL) NOPASSWD: libreoffice
122
spiffytech

すでにデスクトップ環境をお持ちの場合は、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で構築されたいくつかの選択肢にリンクしています。

108
andrewtweber

Bashでは、このlibreofficeコマンドを使用して、現在のディレクトリにあるすべてのxlsxファイルを変換しました。

for i   in *.xlsx; do  libreoffice --headless --convert-to csv "$i" ; done

ファイル名のスペースを処理します。

数年後にもう一度試してみましたが、うまくいきませんでした。 このスレッド はいくつかのヒントを与えますが、最も早い解決策はrootとして(またはSudo libreofficeを実行して)実行することです。エレガントではありませんが、速いです。

Windowsでscalc.exeコマンドを使用する

27
neves

csvkitを使用する

in2csv data.xlsx > data.csv

詳細は彼らの優れた ドキュメントをチェックしてください

25
Holger Brandl

.xlsxファイルに多数のシートがある場合は、-sフラグを使用して必要なシートを入手できます。例えば:

xlsx2csv "my_file.xlsx" -s 2 second_sheet.csv

second_sheet.csvmy_file.xlsxに2枚目のシートのデータを含みます。

8
Akavall

もう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
8
Holger Brandl

Ssconvertと呼ばれるコマンドラインユーティリティがきわめて簡単である Gnumeric スプレッドシートアプリケーションを使用すると、本当に簡単です。

find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;

これで終わりです。

5

Javaコマンドラインを実行しても問題ない場合は、Apache POI HSSFの Excel Extractor を使用して実行できます。これには mainメソッドがあり、これはコマンドライン抽出プログラム です。これはすべてをすべてダンプするようです。彼らは この例ではCSV に変換することを指摘しています。実行する前にコンパイルする必要がありますが、mainメソッドも含まれているので、動作させるためにそれ自体コーディングする必要はありません。

飛ぶかもしれないが反対側でいくらかの作業を必要とするもう一つのオプションはあなたのExcelファイルをExcel XMLデータまたは XMLスプレッドシート としてフォーマットする最近。それはあなたがそれをあなたが望むようにスライスしてさいの目に切る機会の全く新しい世界を開くでしょう。

4
Pavel Veller

他の人が言ったように、libreofficeはxlsファイルをcsvに変換することができます。私にとっての問題はシートの選択でした。

この libreoffice Pythonスクリプト は、1枚のシートをCSVに変換するのに適しています。

使い方は次のとおりです。

./libreconverter.py File.xls:"Sheet Name" output.csv

唯一のマイナス面は(私の側では)--headlessが機能していないようだということです。 LOウィンドウが1秒間表示されてから終了します。
それは私にとっては大丈夫です、それは仕事を迅速にする唯一のツールです。

1
Benoit Duffez