我正在尝试使用 OpenOffice Calc 编辑带有TAB
分隔符的 CSV 文件。无论我做什么,Calc 都会坚持在字符串中添加引号 (")。如果单元格内容仅为数字,则没问题。
有没有办法不让 Calc 这样做?我的意思是,TAB 对于任何解析器来说都足够了,对吧?
答案1
为什么需要双引号?
我的意思是,TAB 对于任何解析器来说都足够了,对吗?
不,严格来说不是!正如我在回答中提到的Excel 的 CSV 格式, 这CSV 文件的通用格式和 MIME 类型(RFC 4180)规定:
… 每个字段可能用双引号括起来,也可能不用(但有些程序,如 Microsoft Excel,根本不使用双引号)。如果字段没有用双引号括起来,那么字段内可能不会出现双引号。
到目前为止一切顺利。Calc 显然选择始终将其括在双引号中。
包含换行符 (CRLF)、双引号和逗号的字段应使用双引号括起来
…所以这就是双引号必须以便 CSV 能够再次被正确解析。
Calc 为什么要添加它们?
Calc 这样做可能是为了确保所有文本字段的安全。相反,Excel 的做法有些模棱两可。
如何避免这些问题?
我发现论坛帖子建议使用宏来禁用文本分隔符:
Dim oDocCsv As Object
Dim CsvProperties(2) As New com.sun.star.beans.PropertyValue
....
CsvProperties(0).Name = "FilterName"
CsvProperties(0).Value = "Text - txt - csv (StarCalc)"
CsvProperties(1).Name = "FilterOptions"
CsvProperties(1).Value = "124,0,ANSI,2"
....
oDocCsv.storeAsURL("test.csv", CsvProperties())
这里重要的选项是带有 的行124,0,ANSI,2
。根据过滤选项参考,第二部分(即0
)在导出时禁用文本分隔符。