使用Gnumeric ssconvert将ods文件转换为csv文件时替换或忽略换行符

Spe*_*osa 3 newline carriage-return export-to-csv gnumeric ssconvert

我正在使用ssconvertGnumeric中的命令将一堆ODS文件转换为一堆CSV文件.我正在使用以下命令

ssconvert -O 'separator=; quoting-mode=never' "f.ods" "f.txt";

这很好...大部分时间.有时候,有些单元格中的用户已经在单元格中的新行字符中发挥作用(在Mac上的OpenOffice和LibreOffice中,您可以通过按下来实现此目的cmd+enter).这导致随后创建的CSV文件获得额外的行,因此而不是

This is some text. Here comes a newline that should be ignored;Some data;Some more data

我明白了

This is some text. Here comes a newline that should be ignored;Some data; Some more data

是否有可能在转换过程中用其他东西替换单元格中的所有这些换行符,例如*?或者我可以以某种方式设置计算机忽略单元格内的所有内联字符?

Zer*_*eus 7

这是你的问题:

ssconvert -O 'separator=;quoting-mode=never'"f.ods" "f.txt";

通过阻止ssconvert在必要时引用,你在这里拍摄自己的脚,你的问题不仅限于换行.例如,此电子表格:

example.ods

在此输入图像描述

由ssconvert命令转换为:

example.txt文件

A1;B1;C1
A2;XX;B2
YY;C2
Run Code Online (Sandbox Code Playgroud)

祝你好运.

而不是试图在转换之后撤消混乱(这将无法可靠地执行),或者在转换之前以某种方式预处理源ODS文件(这是疯了 - 如果你转换为CSV,那么大概是因为你为了避免弄乱ODS文档,你需要使用没有这种基本缺陷的CSV方言.

这意味着您需要引用您的数据.事实证明,ssconvert不够智能,无法在默认设置中引用包含分隔符的单元格:

$ ssconvert -O 'separator=;' example.ods example-2.txt
$ cat example-2.txt
A1;B1;C1
A2;XX;"B2
YY";C2
Run Code Online (Sandbox Code Playgroud)

......所以你需要引用一切:

$ ssconvert -O 'separator=; quoting-mode=always' example.ods example-3.txt
$ cat example-3.txt 
"A1";"B1";"C1"
"A2;XX";"B2
YY";"C2"
Run Code Online (Sandbox Code Playgroud)

解决这个没有可靠的方法与CSV; 除了正确引用您的数据之外,您提出的任何解决方案都会在某些时候回来并咬你,因为不带引号的CSV 从根本上被打破为数据格式.

重申:不要尝试在不带引号的CSV中解决这个基本缺陷.即使你认为你已经通过使用模糊的数据格式解决了你为自己创造的所有问题,但在某些情况下,你没有预料到的情况出现,你会在闲暇时悔改.

  • 很棒的答案!谢谢! (2认同)