我正在寻找一种方法将xlsx文件转换为Linux上的csv文件。
我不想使用PHP/Perl或类似的东西,因为我正在处理数百万行,所以我需要一些快速的东西。我在Ubuntu repos上找到了一个名为xls2csv的程序,但它只会转换xls (Office 2003)文件(我目前正在使用),但我需要对更新的Excel文件的支持。
什么好主意吗?
我正在寻找一种方法将xlsx文件转换为Linux上的csv文件。
我不想使用PHP/Perl或类似的东西,因为我正在处理数百万行,所以我需要一些快速的东西。我在Ubuntu repos上找到了一个名为xls2csv的程序,但它只会转换xls (Office 2003)文件(我目前正在使用),但我需要对更新的Excel文件的支持。
什么好主意吗?
当前回答
使用Gnumeric电子表格应用程序,其中有一个命令行实用程序称为ssconvert,确实超级简单:
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
这样就完成了!
其他回答
如果你已经有了一个桌面环境,那么我相信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构建的替代方案。
如果你可以运行Java命令行,那么你可以用Apache POI HSSF的Excel Extractor来做。它有一个主方法,说它是命令行提取器。这个好像把所有东西都倒出来了。他们指出了这个转换为CSV的例子。在运行它之前,你必须编译它,但它也有一个主方法,所以你不应该做很多编码本身使它工作。
另一种可能可行但需要在另一端做一些工作的方法是将Excel文件转换为Excel XML数据或XML电子表格,不管微软现在怎么称呼这种格式。它将为你打开一个充满机会的全新世界,让你以自己想要的方式来切割它。
使用Gnumeric电子表格应用程序,其中有一个命令行实用程序称为ssconvert,确实超级简单:
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
这样就完成了!
在bash中,我使用这个libreoffice命令来转换当前目录下的所有xlsx文件:
for i in *.xlsx; do libreoffice --headless --convert-to csv "$i" ; done
在执行之前关闭所有Libre Office打开实例,否则它将无声地失败。
该命令负责文件名中的空格。
几年后我又试了一次,但没有成功。这篇文章给出了一些提示,但最快的解决方案是作为根用户运行(或运行sudo libreoffice)。不优雅,但很快。
在Windows中使用命令scalc.exe
https://gist.github.com/scottming/99c09685360376d4cac2de7c891e8050
您可以使用这个脚本。先添加依赖项:
Pip3安装pandas XLRD openpyxl
然后调用脚本:python3 getsheets.py <file.xlsx>