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

时间:2014-05-15 14:55:50

标签: csv newline carriage-return gnumeric

我在Gnumeric中使用ssconvert命令将一堆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

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

1 个答案:

答案 0 :(得分:7)

这是你的问题:

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

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

<强> example.ods

enter image description here

由ssconvert命令转换为:

<强> example.txt中

A1;B1;C1
A2;XX;B2
YY;C2

祝你好运。

而不是尝试在转换后撤消混乱(这将无法可靠地执行),或者在转换之前通过某种方式预处理源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

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

$ ssconvert -O 'separator=; quoting-mode=always' example.ods example-3.txt
$ cat example-3.txt 
"A1";"B1";"C1"
"A2;XX";"B2
YY";"C2"

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

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