我正在寻找一种方法将xlsx文件转换为Linux上的csv文件。

我不想使用PHP/Perl或类似的东西,因为我正在处理数百万行,所以我需要一些快速的东西。我在Ubuntu repos上找到了一个名为xls2csv的程序,但它只会转换xls (Office 2003)文件(我目前正在使用),但我需要对更新的Excel文件的支持。

什么好主意吗?


当前回答

如果.xlsx文件有很多表,-s标志可以用来获得你想要的表。例如:

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

Second_sheet.csv将包含my_file.xlsx中第二表的数据。

其他回答

你可以使用LibreOffice:

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

出于我不清楚的原因,您可能需要使用sudo运行此程序。你可以让LibreOffice使用sudo而不需要密码,添加这行到你的sudoers文件:

users ALL=(ALL) NOPASSWD: libreoffice

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

如果你可以运行Java命令行,那么你可以用Apache POI HSSF的Excel Extractor来做。它有一个主方法,说它是命令行提取器。这个好像把所有东西都倒出来了。他们指出了这个转换为CSV的例子。在运行它之前,你必须编译它,但它也有一个主方法,所以你不应该做很多编码本身使它工作。

另一种可能可行但需要在另一端做一些工作的方法是将Excel文件转换为Excel XML数据或XML电子表格,不管微软现在怎么称呼这种格式。它将为你打开一个充满机会的全新世界,让你以自己想要的方式来切割它。

如果.xlsx文件有很多表,-s标志可以用来获得你想要的表。例如:

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

Second_sheet.csv将包含my_file.xlsx中第二表的数据。

https://gist.github.com/scottming/99c09685360376d4cac2de7c891e8050

您可以使用这个脚本。先添加依赖项:

Pip3安装pandas XLRD openpyxl

然后调用脚本:python3 getsheets.py <file.xlsx>