我正在寻找一种方法将xlsx文件转换为Linux上的csv文件。
我不想使用PHP/Perl或类似的东西,因为我正在处理数百万行,所以我需要一些快速的东西。我在Ubuntu repos上找到了一个名为xls2csv的程序,但它只会转换xls (Office 2003)文件(我目前正在使用),但我需要对更新的Excel文件的支持。
什么好主意吗?
我正在寻找一种方法将xlsx文件转换为Linux上的csv文件。
我不想使用PHP/Perl或类似的东西,因为我正在处理数百万行,所以我需要一些快速的东西。我在Ubuntu repos上找到了一个名为xls2csv的程序,但它只会转换xls (Office 2003)文件(我目前正在使用),但我需要对更新的Excel文件的支持。
什么好主意吗?
当前回答
你可以使用LibreOffice:
libreoffice --headless --convert-to csv $filename --outdir $outdir
出于我不清楚的原因,您可能需要使用sudo运行此程序。你可以让LibreOffice使用sudo而不需要密码,添加这行到你的sudoers文件:
users ALL=(ALL) NOPASSWD: libreoffice
其他回答
https://gist.github.com/scottming/99c09685360376d4cac2de7c891e8050
您可以使用这个脚本。先添加依赖项:
Pip3安装pandas XLRD openpyxl
然后调用脚本:python3 getsheets.py <file.xlsx>
使用csvkit
in2csv data.xlsx > data.csv
详情请查阅他们优秀的文档
如果.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
另一种选择是通过一个小的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