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

176

我需要生成一个Excel文件,其中一些值包含多行文本。

其中还有非英文文本,所以该文件必须是Unicode格式。

我现在生成的文件如下所示:(使用UTF8编码,包含非英文文本并且有许多行)

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

请注意,多行值用双引号括起来,并包含一个普通的日常换行符。

根据我在网上找到的信息,这应该有效,但实际上并不是这样,至少在Excel 2007和UTF8文件中不是这样。Excel将第三行视为数据的第二行,而不是第一行数据的第二行。

这必须在我的客户机上运行,我无法控制他们使用的Excel版本,因此我需要一种适用于Excel 2000及更高版本的解决方案。

谢谢。

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

虽然不是我想要的,但至少它可以工作(到目前为止)。


1
FYI:这在LibreOffice中完美运行,在一开始导入CSV就容易得多。 - user2061057
11
现在您编辑了问题并去除了额外的空格,有关额外空格的被接受答案变得非常混乱... - Matti Virkkunen
19个回答

1
仅针对文件打开,语法如下:

File Open

 ,"one\n
 two",...

关键是在第一个“,”后面没有空格。通常情况下,如果字符串没有引号,则空格无妨且会被修剪。但其他情况则可能出现问题。我花了一些时间才弄明白这一点。
似乎行末是\n或\c\n并不重要。
请确保展开公式栏,以便您可以实际看到单元格中的文本(在漫长的一天之后抓住了我......)
当然,文件打开将无法正确支持UTF-8(除非使用技巧)。
Excel > 数据 > 获取外部数据 > 从文本中获取
可以设置为UTF-8模式(字体列表中排名靠后)。但是,在这种情况下,换行符似乎不起作用,我不知道如何解决这个问题。
(人们可能认为,在30年后,微软应该搞定这些东西了。)

1

包含BOM的UTF文件会导致Excel即使在该字段被引号包围时也会将新行视为字面意义。(已测试Excel 2008 Mac)

解决方案是将任何新行变成回车(CHR 13),而不是换行符。


Excel 2016似乎能正确处理我的CSV文件,即使它有UTF8 BOM。但是真正起作用的是使用“;”作为字段分隔符(这就是Excel针对所有具有“,”作为十进制分隔符的地区所采用的方法)。 - Ale
在Excel 2016 + Windows上,无论是在单元格内使用\r作为换行符还是使用';'作为分隔符都不起作用。 :( - Nickolay

0

通常换行符是"\r\n"。在我的CSV文件中,我用空值替换了"\r"。 以下是Javascript代码:

cellValue = cellValue.replace(/\r/g, "")

当我在 MS Excel 中打开 CSV 文件时,它可以正常工作。如果一个值有多行,它将保持在 Excel 表格的一个单元格中。


0
在每行末尾添加"\r"实际上会在Excel中产生换行效果,但在.csv文件中会消失,导致每行之间没有空格和换行符,看起来很丑。

0

我们的做法(我们使用VB.Net)是用Chr(34)将文本包含在新行中,这是表示双引号的字符,并将所有CR-LF字符替换为LF。


-1

你可以这样做:"\"Value3 Line1 Value3 Line2\""。在Java中生成CSV文件时,这对我很有效。


-2

这里有一个使用JavaScript的有趣方法...

  String.prototype.csv = String.prototype.split.partial(/,\s*/);  

  var results = ("Mugan, Jin, Fuu").csv();                        

  console.log(results[0]=="Mugan" &&                                   
         results[1]=="Jin" &&                                     
         results[2]=="Fuu",                                       
         "The text values were split properly");                  

-4

在内容中打印HTML换行<br/>,并在Excel中打开,将在任何Excel上正常工作。


-4

你可以使用键盘快捷键ALT+Enter。

  1. 选择要编辑的单元格
  2. 通过双击或按下F2进入编辑模式
  3. 按下Alt+enter。这将在单元格中创建一个新行

你如何将它集成到 CVS 文件生成中? - jikuja

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