将.ods文件转换为.csv文件时替换或忽略换行符号。

4
我正在使用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 在转换过程中,是否可以将所有这些单元格内的换行符替换为其他字符,例如*
或者,我是否可以设置计算机忽略单元格内的所有行内字符?
2个回答

8

这是您的问题:

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中的这个基本缺陷。 即使你认为通过使用一个含糊的数据格式已经解决了所有的问题,但在某些情况下,你无法预料到的情况将会出现,并且你会后悔莫及。


2
非常好的答案!谢谢! - Speldosa

0

另一种解决方案(在这种情况下是针对xlsx文件)是:

  1. (如果尚未安装)安装xlsx2csv:apt或pip install

  2. 使用选项-e,在多行单元格内,换行符被替换为\n

重用@ZeroPiraeus的示例,

$ xlsx2csv -e -d ';' example.xlsx

A1;B1;C1
A2;XX;B2\nYY;C2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接