338

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

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

何か案は?

4

11 に答える 11

291

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
于 2012-05-14T09:34:41.440 に答える
167

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

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

理由はわかりませんが、これを sudo で実行する必要があるかもしれません。次の行を sudoers ファイルに追加することで、パスワードを必要とせずに LibreOffice を sudo で動作させることができます。

users ALL=(ALL) NOPASSWD: libreoffice
于 2013-02-13T14:54:56.460 に答える
161

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

于 2014-02-14T18:34:32.243 に答える
46

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

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

実行する前に、Libre Office の開いているインスタンスをすべて閉じてください。そうしないと、サイレントに失敗します。

このコマンドは、ファイル名のスペースを処理します。

数年後に再試行しましたが、うまくいきませんでした。このスレッドはいくつかのヒントを提供しますが、最も迅速な解決策は root として実行する (または を実行するsudo libreoffice) ことでした。エレガントではありませんが、迅速です。

Windows でコマンド scalc.exe を使用します。

于 2014-02-08T20:54:22.347 に答える
12

別のオプションは、便宜上、小さな 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
于 2014-09-02T15:03:26.317 に答える
7

ssconvert と呼ばれるコマンドライン ユーティリティが付属しているGnumericスプレッドシート アプリケーションを使用するのは、非常に簡単です。

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

これで完了です。

于 2016-06-11T15:45:08.703 に答える
4

Javaコマンドラインを実行しても問題がない場合は、ApachePOIHSSFのExcelExtractorを使用して実行できますコマンドラインエクストラクタと言うメソッドがありますmain。これはただすべてを捨てているようです。彼らは、CSVに変換するこの例を指摘しています。実行する前にコンパイルする必要がありますが、mainメソッドもあるので、動作させるためにコーディング自体をあまり行う必要はありません。

飛ぶかもしれないが、もう一方の端でいくつかの作業が必要になる別のオプションは、ExcelファイルをExcelXMLデータまたは最近のMS呼び出しのXMLスプレッドシートとして提供することです。それはあなたがそれをあなたが望むようにスライスしてさいの目に切るための全く新しい機会の世界を開くでしょう。

于 2012-05-11T19:42:22.103 に答える
3

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

このlibreoffice Python スクリプトは、単一のシートを CSV に変換する際にうまく機能します。

使用法は次のとおりです。

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

唯一の欠点 (私の側で) は、それが機能して--headlessいないように見えることです。1 秒間表示されてから終了する LO ウィンドウがあります。
それは私には問題ありません。仕事を迅速に行う唯一のツールです。

于 2016-12-16T10:22:57.670 に答える