我想将电子表格(ods 或 xlsx)拆分为多个 csv 文件,每个工作表对应一个文件。
我想在不启动图形应用程序的情况下做到这一点,最好只用一行代码。
有任何想法吗?
虽然链接的重复在其中一个答案中提供了可能的解决方案(不是在已接受的答案中),并且很有帮助。但该解决方案无法按照我的要求处理 ODS 文件,而且我认为这个问题有很大不同。
答案1
嗯,libreoffice
可以从脚本转换文档(即在无头模式下,无需打开 GUI)。要将任何电子表格格式转换为 CSV,其最简单的形式如下
libreoffice --convert-to csv PATH/TO/YOUR.ODS
但是,这只会提取文档的第一页并进行转换,而忽略所有其他页。遗憾的是,它也没有选择要转换的页的选项。
所以我们需要一个外部工具,比如转为csv。它是一个开源 Python(2 和 3)脚本,可将 XLSX 文件转换为 CSV,并支持将所有工作表提取到单独的文件中。
Ubuntu 已经安装了 Python,但你可能需要pip
先安装它的包管理器。我选择的是 Python 3,但你也可以更改下面的所有命令以使用 2 来运行它:
sudo apt install python3-pip
然后你可以使用xlsx2csv
以下命令安装pip3
到用户的包目录中
pip3 install --user xlsx2csv
此后,可以在中找到可执行脚本~/.local/bin/xlsx2csv
。
现在,如果您还没有 XLSX 格式,让我们使用以下命令转换该 ODS 电子表格libreoffice
:
libreoffice --convert-to xlsx PATH/TO/YOUR.ods
然后我们使用xlsx2csv
来提取所有工作表。它将创建一个文件夹OUTPUTFOLDER
并将所有提取的内容放在SHEETNAME.csv
其中:
~/.local/bin/xlsx2csv -a YOUR.xlsx OUTPUTFOLDER
答案2
使用xls2csv
(转换.XLS) 工具catdoc
包安装sudo apt install catdoc
:
xls2csv -b '
' EXCEL.xls | awk '{print >"sheet"NR}' RS='\n\n'
这xls2csv -b ' ' EXCEL.xls
将读取 MS-Excel 文件并将其内容作为逗号分隔的数据放在标准输出上,并且-b STRING
我们告诉工作表用什么字符(或字符串;我们在这里定义了一个实际的换行符)来分隔。
使用xlsx2csv
(转换.XLSX); 安装sudo apt install xlsx2csv
:
xlsx2csv -s 0 EXCEL.xlsx |
awk '!/,/ { nextSheet++; next } { print >"sheet"nextSheet }'
意思-s 0
是打印所有纸张。
答案3
看一眼
ssconvert -O 'separator=:: format=raw quoting-mode=never' -S x.ods out%n.txt
\感谢{Bruni}
-O 'separator= format= ...'
用于控制csv格式的详细信息-S
为每个工作表创建不同的输出文件