我正在寻找一种方法将xlsx文件转换为Linux上的csv文件。
我不想使用PHP/Perl或类似的东西,因为我正在处理数百万行,所以我需要一些快速的东西。我在Ubuntu repos上找到了一个名为xls2csv的程序,但它只会转换xls (Office 2003)文件(我目前正在使用),但我需要对更新的Excel文件的支持。
什么好主意吗?
我正在寻找一种方法将xlsx文件转换为Linux上的csv文件。
我不想使用PHP/Perl或类似的东西,因为我正在处理数百万行,所以我需要一些快速的东西。我在Ubuntu repos上找到了一个名为xls2csv的程序,但它只会转换xls (Office 2003)文件(我目前正在使用),但我需要对更新的Excel文件的支持。
什么好主意吗?
当前回答
你可以使用LibreOffice:
libreoffice --headless --convert-to csv $filename --outdir $outdir
出于我不清楚的原因,您可能需要使用sudo运行此程序。你可以让LibreOffice使用sudo而不需要密码,添加这行到你的sudoers文件:
users ALL=(ALL) NOPASSWD: libreoffice
其他回答
你可以使用LibreOffice:
libreoffice --headless --convert-to csv $filename --outdir $outdir
出于我不清楚的原因,您可能需要使用sudo运行此程序。你可以让LibreOffice使用sudo而不需要密码,添加这行到你的sudoers文件:
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构建的替代方案。
使用Gnumeric电子表格应用程序,其中有一个命令行实用程序称为ssconvert,确实超级简单:
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
这样就完成了!
正如其他人所说,libreoffice可以将xls文件转换为csv文件。对我来说,问题在于纸张的选择。
这个libreoffice Python脚本在将单个表格转换为CSV方面做得很好。
用法是:
./libreconverter.py File.xls:"Sheet Name" output.csv
唯一的缺点(在我这边)是——无头似乎不管用。我有一个LO窗口,显示了一秒钟,然后退出。 这对我来说没问题,这是唯一能快速完成工作的工具。
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