我正在寻找一种方式来转换XLSX文件到csv在Linux上的文件。
我不想使用PHP / Perl或类似的东西,因为我期待在处理几百万行的,所以我需要的东西很快。 我发现在Ubuntu回购称为xls2csv一个程序,但它仅转换XLS(Office 2003)中的文件(这我目前使用的),但我需要为新的Excel文件支持。
有任何想法吗?
我正在寻找一种方式来转换XLSX文件到csv在Linux上的文件。
我不想使用PHP / Perl或类似的东西,因为我期待在处理几百万行的,所以我需要的东西很快。 我发现在Ubuntu回购称为xls2csv一个程序,但它仅转换XLS(Office 2003)中的文件(这我目前使用的),但我需要为新的Excel文件支持。
有任何想法吗?
该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
你可以用的LibreOffice做到这一点:
libreoffice --headless --convert-to csv $filename --outdir $outdir
至于原因,我也不清楚,你可能需要使用sudo运行此。 您可以使用sudo LibreOffice的工作,而加入这一行,你sudoers文件需要密码:
users ALL=(ALL) NOPASSWD: libreoffice
如果你已经有了一个桌面环境那么我敢肯定的Gnumeric / LibreOffice的将工作做好,但无头的服务器(如亚马逊网络服务),他们需要几十依赖,你还需要安装的。
我发现这条巨蟒的选择:
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几个备选方案。
在bash中,我用这个命令的LibreOffice我所有的XLSX文件转换在当前目录:
for i in *.xlsx; do libreoffice --headless --convert-to csv "$i" ; done
它关心空格的文件名。
再次尝试了一些年后,并没有工作。 这个线程给出了一些提示,但quickiest解决方案是为根(或运行运行sudo libreoffice
)。 不优雅,但快。
使用Windows命令scalc.exe
使用csvkit
in2csv data.xlsx > data.csv
有关详情请检查其出色的文档
另一种办法是通过一个小的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
如果.xlsx
文件中有许多张, -s
标志可用来得到你想要的工作表。 例如:
xlsx2csv "my_file.xlsx" -s 2 second_sheet.csv
second_sheet.csv
将包含第二片材的数据my_file.xlsx
。
使用的Gnumeric其来自哪个叫ssconvert一个命令行工具确实是超级简单的电子表格应用程序:
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
就大功告成了!
如果你确定运行Java命令行,那么你可以使用Apache POI HSSF的做Excel中提取 。 它有一个main
,说是命令行提取方法 。 这一个似乎只转储一切了。 他们指出,以这个例子转换为CSV 。 你将不得不编译它,然后才能运行它,但它也有一个main
方法,所以你不应该做太多的编码本身,使其工作。
可能飞,但需要在其他方面的一些工作,另一种选择是让你的Excel文件来给你为Excel XML数据或XML表格什么的MS调用格式的这些日子。 这将打开的机会,一个全新的世界,为您切片和切块你想要的方式。
正如有人说, libreoffice
可XLS文件转换为csv。 对我来说,问题是纸张选择。
这LibreOffice的Python脚本做了很好的工作在一张纸上转换成CSV。
使用方法是:
./libreconverter.py File.xls:"Sheet Name" output.csv
唯一的缺点(在我结束)是--headless
似乎并没有工作。 我有一个LO窗口,其中显示了一秒钟,然后退出。
这是我OK,就这么迅速地做这项工作的唯一工具。
你可以尝试打开/ LibreOffice的电子表格。 这不是一个命令行工具,但有一个很好的机会,他们会支持XLSX。 见www.libreoffice.org/features/calc/ 。 它提到XLSX支持。