小编典典

为 Excel 生成 CSV 文件,如何在值内添加换行符

all

我需要为 Excel 生成一个文件,这个文件中的一些值包含多行。

那里还有非英文文本,所以文件必须是 Unicode。

我现在生成的文件看起来像这样:(在 UTF8 中,混合了非英文文本并且有很多行)

Header1,Header2,Header3
Value1,Value2,"Value3 Line1
Value3 Line2"

请注意,多行值用双引号括起来,其中包含正常的日常换行符。

根据我在网上找到的内容,这应该可以工作,但至少不能赢得 Excel 2007 和 UTF8 文件,Excel
将第三行视为第二行数据而不是第一行数据的第二行.

这必须在我客户的机器上运行,而且我无法控制他们的 Excel 版本,所以我需要一个适用于 Excel 2000 及更高版本的解决方案。

谢谢

编辑:我通过有两个 CSV 选项“解决”了我的问题,一个用于
Excel(Unicode,制表符分隔,字段中没有换行符),另一个用于世界其他地方(UTF8,标准 CSV)。

不是我想要的,但至少它有效(到目前为止)


阅读 262

收藏
2022-08-29

共1个答案

小编典典

只有在空格字符是数据的一部分时,您才应该在字段的开头使用空格字符。Excel
不会去掉前导空格。您将在标题和数据字段中获得不需要的空格。更糟糕的是",应该“保护”第三列中的换行符将被忽略,因为它不在字段的开头。

如果文件中有非 ASCII 字符(以 UTF-8 编码),则文件开头应该有一个 UTF-8 BOM(3 个字节,hex EF BB BF)。否则
Excel 将根据您的语言环境的默认编码(例如 cp1252)而不是 utf-8 解释数据,并且您的非 ASCII 字符将被丢弃。

以下评论适用于 Excel 2003、2007 和 2013; 未在 Excel 2000 上测试

如果您通过在 Windows 资源管理器中双击文件名来打开文件,则一切正常。

如果从 Excel 中打开它,结果会有所不同:

  1. 文件中只有 ASCII 字符(没有 BOM):有效。
  2. 文件中有非 ASCII 字符(以 UTF-8 编码),开头是 UTF-8 BOM:它识别出您的数据以 UTF-8 编码,但它忽略 csv 扩展名并将您放入 Text导入 not-a-Wizard ,不幸的是,您会遇到换行问题。

选项包括:

  1. 训练用户不要从 Excel 中打开文件 :-(
  2. 考虑直接编写一个 XLS 文件…在 Python/Perl/PHP/.NET/etc 中有可用于执行此操作的包/库
2022-08-29