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

问题描述 投票:0回答:12

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

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

有什么想法吗?

linux excel csv converters xlsx
12个回答
323
投票

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

177
投票

您可以使用 LibreOffice 做到这一点:

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

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

users ALL=(ALL) NOPASSWD: libreoffice

171
投票

如果你已经有了桌面环境_ 那么我确定 GnumericLibreOffice 会工作得很好,但是在无头服务器上(例如 Amazon Web Services),它们需要许多你也需要安装的依赖项.

我找到了这个 Python 替代品:xlsx2csv

easy_install xlsx2csv
xlsx2csv file.xlsx > newfile.csv

安装只需两秒钟,效果非常好。

如果您有多张纸,您可以一次全部导出,或一次导出一张:

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 构建的替代方案。


55
投票

使用csvkit

in2csv data.xlsx > data.csv

有关详细信息,请查看他们出色的文档


50
投票

在 Bash 中,我使用这个 LibreOffice 命令(可执行

libreoffice
)转换当前目录中的所有 .xlsx 文件:

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

在执行之前关闭所有 LibreOffice 打开的实例,否则它将静默失败。

该命令处理文件名中的空格。

几年后我又试了一次,还是不行。 This question 给出了一些提示,但最快的解决方案是以 root 身份运行(或运行

sudo libreoffice
)。它不优雅,但很快。

在 Windows 中使用命令 scalc.exe


12
投票

为了方便起见,另一种选择是通过小型 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

8
投票

如果

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

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

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


7
投票

使用带有名为 ssconvert 的命令行实用程序的 Gnumeric 电子表格应用程序确实非常简单:

find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;

你就完成了!


4
投票

如果您可以运行 Java 命令行,那么您可以使用 Apache POI HSSF 的Excel Extractor。它有 a

main
方法,据说是命令行提取器。这个似乎只是把所有东西都倒掉了。他们指出这个转换为 CSV 的例子。您必须先编译它才能运行它,但它也有一个
main
方法,因此您本身不必做太多编码就可以使其工作。

另一个可能可行但需要在另一端做一些工作的选项是让您的 Excel 文件以 Excel XML 数据或 XML 电子表格 的形式出现,无论这些格式是这些天 MS 调用的什么格式。它将打开一个全新的机会世界,让您按照自己的方式切片和切块。


4
投票

您可以使用可执行文件

libreoffice
将您的 .xlsx 文件转换为 csv:

libreoffice --headless --convert-to csv ABC.xlsx

参数--headless表示我们不需要GUI.


3
投票

正如其他人所说,可执行文件

libreoffice
可以将Excel文件(.xls)文件转换为CSV。对我来说问题是工作表的选择。

这个 LibreOffice Python 脚本 在将单个工作表转换为 CSV 方面做得很好。

用法是:

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

唯一的缺点(在我这边)是

--headless
似乎不起作用。我有一个 LibreOffice 窗口显示一秒钟然后退出。

我没意见;它是唯一可以快速完成工作的工具。


0
投票

您可以使用脚本getsheets.py。先添加依赖:

pip3 install pandas xlrd openpyxl

然后调用脚本:

python3 getsheets.py <file.xlsx>

© www.soinside.com 2019 - 2024. All rights reserved.