使用命令行在Linux中将xlsx转换为csv

时间:2012-05-11 19:18:13

标签: linux excel csv converter xlsx

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

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

有什么想法吗?

10 个答案:

答案 0 :(得分:197)

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

答案 1 :(得分:122)

您可以使用LibreOffice执行此操作:

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

由于我不清楚的原因,您可能需要使用sudo运行它。您可以通过将此行添加到sudoers文件中,使LibreOffice无需密码即可使用sudo:

users ALL=(ALL) NOPASSWD: libreoffice

答案 2 :(得分:107)

如果您已经拥有桌面环境,那么我确信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构建的几种替代方案。

答案 3 :(得分:27)

在bash中,我使用此libreoffice命令转换当前目录中的所有xlsx文件:

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

它负责文件名中的空格。

几年后再次尝试,但它没有用。 This thread提供了一些提示,但最快的解决方案是以root身份运行(或运行sudo libreoffice)。不优雅,但很快。

在Windows中使用命令scalc.exe

答案 4 :(得分:25)

使用csvkit

in2csv data.xlsx > data.csv

详细信息请查看优秀docs

答案 5 :(得分:8)

另一种选择是通过一个小的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

答案 6 :(得分:8)

如果.xlsx文件包含多张工作表,则可以使用-s标记来获取所需的工作表。例如:

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

second_sheet.csv将包含my_file.xlsx中第二张的数据。

答案 7 :(得分:5)

使用Gnumeric电子表格应用程序,命令行实用程序称为ssconvert确实非常简单:

 $.ajax({
        url: "dataWebService.asmx/getCasesForDateInterval",
        method: "POST",
        contentType: "application/json; charset=utf-8",
        data:'{"startDate":"' + startDate + '", "endDate":"' + endDate + '"}',
        dataType: "json",
        success: function (data) {
            resultElement.html(data);
        }
    });

你完成了!

答案 8 :(得分:4)

如果您可以运行Java命令行,那么您可以使用Apache POI HSSF的Excel Extractor来执行此操作。它有a main method that says to be the command line extractor。这个似乎只是把一切都抛弃了。他们指出this example that converts to CSV。您必须先编译它才能运行它,但它也有一个main方法,因此您不必为了使其工作而进行大量编码。

可能会飞行但另一端需要做一些工作的另一个选项是让您的Excel文件作为Excel XML数据或XML Spreadsheet这些日期格式化的MS调用。它将为您打开一个全新的机会世界,让您按照自己的方式进行切片和切块。

答案 9 :(得分:1)

正如其他人所说,libreoffice可以将xls文件转换为csv。对我来说问题是选择表格。

libreoffice Python script可以很好地将单张工作表转换为CSV格式。

用法是:

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

唯一的缺点(在我的结尾)是--headless似乎不起作用。我有一个显示一秒钟的LO窗口,然后退出 这对我来说没关系,它是唯一能够快速完成工作的工具。