3

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

是否可以在转换过程中将单元格中的所有这些换行符替换为其他内容,例如 a *

或者我可以以某种方式将计算机设置为忽略单元格中的所有内联字符吗?

4

1 回答 1

7

这是你的问题:

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

通过在必要时阻止 ssconvert 引用,您在这里是自找麻烦,您的问题不仅限于换行符。例如,这个电子表格:

例子.ods

在此处输入图像描述

由您的 ssconvert 命令转换为:

例子.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 中的这个基本缺陷。即使您认为您已经解决了使用模棱两可的数据格式为自己制造的所有问题,但在某个时候,您没有预料到的情况出现,您会在闲暇时悔改。

于 2014-06-27T18:09:16.370 回答