我应该如何在CSV文件中转义逗号和语音标记,以便它们在Excel中工作?

cen*_*cru 101 java csv excel special-characters

我正在生成一个CSV文件(用逗号而不是制表符分隔).我的用户很可能通过双击在Excel中打开CSV文件.我的数据可能包含逗号和语音标记,因此我将按以下方式转义.

Reference, Title, Description
1, "My little title", "My description, which may contain ""speech marks"" and commas."
2, "My other little title", "My other description, which may also contain ""speech marks"" and commas."
Run Code Online (Sandbox Code Playgroud)

据我所知,一直都是这样做的.这是我的boggle:当我在Excel 2010中打开此文件时,我的转义不受尊重.语音标记显示在工作表上,逗号导致新列.

cen*_*cru 206

我们最终找到了答案.

如果列值前面没有空格,Excel将仅考虑转义逗号和语音标记.因此生成没有这样的空格的文件......

Reference,Title,Description
1,"My little title","My description, which may contain ""speech marks"" and commas."
2,"My other little title","My other description, which may also contain ""speech marks"" and commas."
Run Code Online (Sandbox Code Playgroud)

......修复了问题.希望这有助于某人!

  • 这是我以前遇到过的一个问题,我总是忘记它。Excel 应该停止这种行为,因为它只会造成混乱,而且一开始就不是一个有用的规则。那个或 csv 应该在逗号之间强制没有空格。 (2认同)

Yas*_*shu 56

如果您认为它是随机的,则以下是规则.可以基于这些规则创建效用函数.

  1. 如果值包含逗号,换行符或双引号,则应以双引号括起来返回String值.

  2. 值中的任何双引号字符都应使用另一个双引号进行转义.

  3. 如果该值不包含逗号,换行符或双引号,则应返回String值不变.

  • 引用包装没有逗号,双引号或换行符的内容会不会有什么损害? (4认同)
  • 没有ErikReppen我认为这不会正常伤害.我属于java背景,建议不要通过替换旧文件中的文本来创建新字符串,因为它们在堆内存中有自己的共享.如果您愿意,您可以无条件地替换所有值,并告诉我们它是否会导致任何问题,尽管它不应该. (2认同)
  • 以空格开头或结尾的字段应加引号。 (2认同)