我正在寻找在Linux上将xlsx文件转换为csv文件的方法。
由于我需要处理数百万行数据,因此我不想使用PHP / Perl或类似的东西,我需要一个快速的解决方案。我在Ubuntu仓库中找到了一个叫做xls2csv的程序,但它只能转换xls(Office 2003)文件(我目前在使用),但我需要支持更新的Excel文件。
有什么好的建议吗?
我正在寻找在Linux上将xlsx文件转换为csv文件的方法。
由于我需要处理数百万行数据,因此我不想使用PHP / Perl或类似的东西,我需要一个快速的解决方案。我在Ubuntu仓库中找到了一个叫做xls2csv的程序,但它只能转换xls(Office 2003)文件(我目前在使用),但我需要支持更新的Excel文件。
有什么好的建议吗?
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
虽然LibreOffice方法可能处理其他格式,但我无法使其正常工作(即使使用--headless
参数,它也只会每次打开一个空文件)。 - sleblancapt-get install gnumeric --no-install-recommends
在一个无头的 Debian 服务器上安装了它。唯一的缺点是,运行时会触发很多警告信息 **GConf-WARNING : Client failed to connect to the D-BUS daemon。使用简单的命令 ssconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
就可以解决问题。 - Benjamin Delichere-S
标志以将多个工作表写入不同的文件中,这样每个工作表都可以单独保存为一个文件。 - Ed Avisssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
。 - exic你可以使用LibreOffice来完成此操作:
libreoffice --headless --convert-to csv $filename --outdir $outdir
由于原因不明,您可能需要使用sudo来运行此命令。您可以通过将以下行添加到sudoers文件中,在不需要密码的情况下使LibreOffice能够使用sudo:
%sudo ALL=(ALL) NOPASSWD: /usr/bin/soffice
users ALL=(ALL) NOPASSWD: libreoffice
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
在我的苹果电脑上正常运行。 - Nobu--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
命令。有关详细信息,请参阅OpenOffice Wiki。 - Aryeh Leib Taurogeasy_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
xlsx2csv
软件包,因此您无需通过easy_install
手动安装它,而可以使用软件包管理器。 - joschxlsx2csv
有多健壮或功能完整,但它似乎正在积极维护,并且与通过Homebrew在macOS上安装Gnumeric(涉及30多个依赖项)和LibreOffice(几百MB的下载)相比,xlsx2csv
没有任何依赖关系,只有50 KB,并且对于我的用例(将PaddleOCR的输出转换为csv)完美地工作。您可以使用pip install xlsx2csv
进行安装,也可以从Repository下载最新的release,然后运行xlsx2csv.py
。 - Stefan Schmidt在Bash中,我使用了这个LibreOffice命令(可执行文件libreoffice
)来转换当前目录下所有的.xlsx文件:
for i in *.xlsx; do libreoffice --headless --convert-to csv "$i" ; done
在执行之前请关闭所有已打开的LibreOffice实例,否则它将默默失败。
该命令会处理文件名中的空格。
我几年后再次尝试,但它不起作用。这个问题提供了一些提示,但最快的解决方法是以root身份运行(或者运行sudo libreoffice
)。它不够优雅,但很快。
在Windows中使用命令scalc.exe。
另一个选项是使用R通过一个小的Bash包装器来方便地使用:
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
.xlsx
文件有很多工作表,可以使用 -s
标志来获取所需的工作表。例如:xlsx2csv "my_file.xlsx" -s 2 second_sheet.csv
second_sheet.csv
包含 my_file.xlsx
中第二个工作表的数据。
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
完成了!
main
方法,称为命令行提取器。这个似乎只是把所有东西都倾倒出来了。他们指出这个将转换为CSV的示例。在运行之前,您必须编译它,但它也有一个main
方法,因此您不需要做太多的编码以使其工作。
另一个可能可行但需要在另一端进行一些工作的选择是将您的Excel文件以Excel XML数据或XML电子表格的形式发送给您,无论微软现在称呼该格式为什么。这将为您打开一个全新的机会世界,让您按照自己的方式对其进行切割和挖掘。
您可以使用可执行文件 libreoffice
将您的 .xlsx 文件转换为 csv:
libreoffice --headless --convert-to csv ABC.xlsx
--headless参数表示我们不需要GUI界面。