我正在寻找一种在Linux上将xlsx文件转换为csv文件的方法。
我不想使用PHP / Perl或类似的东西,因为我正在考虑处理几百万行,所以我需要快速的东西。我在Ubuntu仓库上找到了一个名为xls2csv的程序,但它只能转换xls(Office 2003)文件(我当前正在使用),但是我需要支持较新的Excel文件。
有任何想法吗?
我正在寻找一种在Linux上将xlsx文件转换为csv文件的方法。
我不想使用PHP / Perl或类似的东西,因为我正在考虑处理几百万行,所以我需要快速的东西。我在Ubuntu仓库上找到了一个名为xls2csv的程序,但它只能转换xls(Office 2003)文件(我当前正在使用),但是我需要支持较新的Excel文件。
有任何想法吗?
Answers:
的 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
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
LibreOffice方法可能可以处理其他格式,但是我无法使其工作(它每次都会打开一个空白文件,即使带有--headless
参数也是如此)。
apt-get install gnumeric --no-install-recommends
。唯一的缺点是,它会发出大量警告GConf-WARNING **:客户端在运行时无法连接到D-BUS守护程序。一个简单ssconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
的技巧就可以了。
-S
标志写入多张纸。每个都转到其自己的文件。
ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
。
您可以使用LibreOffice执行此操作:
libreoffice --headless --convert-to csv $filename --outdir $outdir
由于我不清楚的原因,您可能需要使用sudo运行它。通过将以下行添加到您的sudoers文件中,可以使LibreOffice在sudo上工作而无需输入密码:
users ALL=(ALL) NOPASSWD: libreoffice
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
为我在OS X上工作。
--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
。有关详细信息,请参见开放式办公室Wiki。
如果您已经有一个桌面环境,那么我确定Gnumeric / LibreOffice可以很好地工作,但是在无头服务器(例如Amazon Web Services)上,它们需要数十个依赖项,您还需要安装这些依赖项。
我找到了这个Python替代方法:
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内置的几种替代方案。
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg/EGG-INFO/top_level.txt'
)的身份运行。现在我考虑了一下,我也遇到了同样的错误csvkit
。
xlsx2csv
软件包,因此您不需要手动安装它,easy_install
但可以使用软件包管理器。
sudo easy_install xlsx2csv
在bash中,我使用了以下libreoffice命令来转换当前目录中的所有xlsx文件:
for i in *.xlsx; do libreoffice --headless --convert-to csv "$i" ; done
它照顾文件名中的空格。
几年后再次尝试,但没有成功。该线程提供了一些技巧,但最快的解决方案是以root身份运行(或运行sudo libreoffice
)。不优雅,但快速。
在Windows中使用命令scalc.exe
scalc.exe
不是libreoffice
。今天为我工作,当前稳定的LO版本。
使用附带的Gnumeric电子表格应用程序确实非常简单:命令行工具ssconvert
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
完成了!
如果可以运行Java命令行,则可以使用Apache POI HSSF的Excel Extractor进行。它有一个main
称为命令行提取器的方法。这似乎只是将所有内容转储出去。他们指出了转换为CSV的此示例。您必须先编译它,然后才能运行它,但它也有一个main
方法,因此您不必自己进行大量编码即可使其工作。
另一个可行的选择,但另一方面,它还需要进行一些工作,这是使您的Excel文件以Excel XML Data或XML Spreadsheet的形式出现在您眼前,而无论MS如何称呼这种格式。它将为您打开一个全新的机会世界,让您以自己想要的方式进行切片和切块。
正如其他人所说, libreoffice
可以将xls文件转换为csv。对我来说,问题是工作表的选择。
这个libreoffice Python脚本在将单个工作表转换为CSV方面做得很好。
用法是:
./libreconverter.py File.xls:"Sheet Name" output.csv
唯一的缺点(对我而言)--headless
似乎不起作用。我有一个LO窗口,显示一秒钟然后退出。
没关系,这是唯一可以快速完成工作的工具。