Linuxでxlsxファイルをcsvファイルに変換する方法を探しています。
私は数百万行を処理することを検討しているので、PHP / Perlやそのようなものを使用したくないので、簡単なものが必要です。xls2csvと呼ばれるプログラムをUbuntuリポジトリで見つけましたが、それはxls(Office 2003)ファイル(現在使用中)のみを変換しますが、新しいExcelファイルのサポートが必要です。
何か案は?
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
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
LibreOfficeメソッドはおそらく他のフォーマットを処理できますが、私はそれを機能させることができませんでした(--headless
引数があっても毎回空のファイルを開くだけでした)。
apt-get install gnumeric --no-install-recommends
。唯一の欠点は、GConf-WARNING **:クライアントが実行中にD-BUSデーモンへの接続に失敗したことで、多くの警告が発生することです。単純な方法でssconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
うまくいきます。
-S
フラグで複数のシートを書き込む必要があります。それぞれが独自のファイルに移動します。
ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
。
LibreOfficeでこれを行うことができます:
libreoffice --headless --convert-to csv $filename --outdir $outdir
はっきりしない理由で、これをsudoで実行する必要があるかもしれません。次の行をsudoersファイルに追加することで、パスワードを要求せずにLibreOfficeをsudoで動作させることができます。
users ALL=(ALL) NOPASSWD: libreoffice
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
私のためにOS Xで働いた。
--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
。詳細については、Open Office Wikiを参照してください。
デスクトップ環境がすでにある場合は、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で構築されたいくつかの代替案にリンクしています。
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg/EGG-INFO/top_level.txt'
)としてのみ実行できます。考えてみたところ、で同じエラーが発生しましたcsvkit
。
xlsx2csv
パッケージがあるため、手動でインストールする必要はありませんがeasy_install
、パッケージマネージャーを使用できます。
sudo easy_install xlsx2csv
bashでは、このlibreofficeコマンドを使用して、現在のディレクトリにあるすべてのxlsxファイルを変換しました。
for i in *.xlsx; do libreoffice --headless --convert-to csv "$i" ; done
ファイル名のスペースを処理します。
数年後にもう一度試してみましたが、うまくいきませんでした。このスレッドはいくつかのヒントを提供しますが、最も迅速な解決策はrootとして実行する(またはを実行するsudo libreoffice
)ことでした。エレガントではないが速い。
Windowsでコマンドscalc.exeを使用する
scalc.exe
ではなくですlibreoffice
。今日の安定したLOバージョンで私のために働いた。
別のオプションは、便宜上、小さな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を使用して実行できます。それは持っているコマンドライン抽出すると言う方法を。これはただすべてを捨てるようです。彼らは、CSVに変換するこの例を指摘しています。実行する前にコンパイルする必要がありますが、これにもmain
main
メソッドがあるためせるためにそれ自体多くのコーディングを行う必要はありません。
飛ぶかもしれないがもう一方の作業が必要になるもう1つのオプションは、最近ExcelがExcelのXMLデータまたはXMLスプレッドシートとして、MSがこのフォーマットで呼び出すものとして提供することです。それはあなたがあなたが望む方法でそれをスライスしてダイスする機会の全く新しい世界を開きます。
他の人が言ったように、libreoffice
xlsファイルをcsvに変換できます。私にとっての問題は、シートの選択でした。
このlibreoffice Pythonスクリプトは、単一のシートをCSVに変換するのに優れています。
使い方は:
./libreconverter.py File.xls:"Sheet Name" output.csv
(私の側で)唯一の欠点は、--headless
動作しないようです。しばらく表示されてから終了するLOウィンドウがあります。
それは私には大丈夫です、それは仕事を迅速に行う唯一のツールです。