在Linux命令行中将xlsx转换为csv
我正在寻找一种方法来将xlsx文件转换为Linux中的csv文件,我不想使用PHP / Perl或类似的东西,因为我正在处理数百万行,所以我需要一些快速的东西。 我发现了一个名为xls2csv的Ubuntu的回购计划,但它只会转换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来运行。 你可以让LibreOffice和sudo一起工作,而不需要input密码,通过添加这行代码给sudoers文件:
users ALL=(ALL) NOPASSWD: libreoffice
如果你已经有一个桌面环境,那么我确信Gnumeric / LibreOffice能够正常工作,但是在一个无头的服务器(比如amazon web services)上,他们需要很多依赖,你还需要安装。
我发现这个Python的替代scheme:
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构build的几个替代scheme。
使用csvkit
in2csv data.xlsx > data.csv
详情请查看他们的优秀文档
在bash中,我使用这个libreoffice命令来转换当前目录中的所有xlsx文件:
for i in *.xlsx; do libreoffice --headless --convert-to csv "$i" ; done
它处理文件名中的空格。
几年后又试了一次,没有奏效。 这个线程提供了一些提示,但最快的解决scheme是以root身份运行(或运行sudo libreoffice
)。 不优雅,但很快。
在Windows中使用命令scalc.exe
另一个select是使用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
中第二张表的数据。
如果您可以运行Java命令行,那么您可以使用Apache POI HSSF的Excel Extractor来完成 。 它有一个main
方法,说是命令行提取器 。 这似乎只是倾倒一切。 他们指出这个例子转换成CSV 。 在运行之前,你必须编译它,但是它也有一个main
方法,所以你不必为了使它工作而做很多的编码。
另一个可能会飞,但需要一些另一端的工作是让你的Excel文件来找你,如Excel XML数据或XML电子表格的任何MS现在调用这种格式。 它将为您打开一个全新的机会世界,以您想要的方式进行切分。
使用命令行实用程序ssconvert提供的Gnumeric电子表格应用程序确实非常简单:
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
你完成了!
正如其他人所说, libreoffice
可以将xls文件转换为csv。 对我来说,问题在于表格select。
这个libreoffice Python脚本在将单个工作表转换为CSV方面做得很好。
用法是:
./libreconverter.py File.xls:"Sheet Name" output.csv
唯一的缺点(在我的结尾)是 – 无头似乎不工作。 我有一个LO窗口,显示一秒钟,然后退出。
对我来说没问题,这是快速完成工作的唯一工具。
您可以尝试Open / LibreOffice电子表格。 这不是一个命令行工具,但他们很有可能会支持xlsx。 请参阅www.libreoffice.org/features/calc/ 。 它提到了xlsx的支持。
- 如何在@FacesConverter中注入@EJB,@PersistenceContext,@Inject,@Autowired等?
- 将两个h:inputText字段分割为小时和分钟,并使用f:convertDateTime分割java.util.Date
- 如何将特定值传递给转换器参数?
- 内置WPF IValueConverters
- C#如何翻译虚拟键码字符?
- Java:如何将String 转换为List或Set
- 在p:selectOneMenu中使用“请select”f:selectItem,其中null / empty值
- 如何将一个string转换成一个ArrayList?
- 以字节为单位将大小转换为KB,MB,GB的正确方法