我正在尝试动态生成一个csv文件,其中包含一些包含多行的单元格,例如,地址字段需要分组到一个“地址”单元格而不是地址,城市,州等。所有都是顺利但最近两天我试图插入\ r,\ r \ n,\ n,chr(10),chr(13),以及代码中的回车来创建回车我正在寻找细胞内。所有这些都失败了,或者在我的csv中打印为“\ r \ n”等,或者当我在代码中进行手动回车时它会生成一个新行。我正在使用它在我的单元格中创建中断,但它无法正常工作
$groupedCell = implode('\r',$data);
我很确定代码是正确的,因为它的放置\ r \ n我希望回车但不是我正在寻找的实际回报。我尝试了一些不同的编码,但仍然没有运气,我在Open Office测试,我想这可能是问题,但我认为它可以处理单元格内的回车,我没有看到任何文档支持否则。谢谢你的阅读!
答案 0 :(得分:18)
CSV spec是我发现的以多种不同的方式实现的......基本上看起来它只有一半是令人沮丧的,因为它很受欢迎。
要在CSV中的单元格中包含换行符,可能需要对单元格进行换行,或者可能需要对换行符进行转义。你会从链接文档中注意到有三种方法可以做到这一点 - 不同的程序对待它的方式不同:
\
结尾的行不被视为行的结尾,而是单元格中的换行符。只要单元格前面有反斜杠字符,单元格就可以包含未转义的换行符。\n
或\r\n
。在这种情况下,单元格已完全转义换行符。可能需要逃避控制字符(以及其他内容(例如#1中的"
和#2 + 3中的\
)以及不同的转义风格(例如,嵌入式报价可以转义为:double double quote ""
或反斜杠 - 双引号\"
)
我的建议:生成一个包含多行和密钥转义字符的开放式办公文档,并查看open-office如何生成CSV
文件。从那里,您可以决定上述哪些方法用于单元格中的换行符,以及哪种转义方法。
style-1(excel)的示例:
#num,str,num
1,"Hello
World",1990
2,"Yes",1991
样式2的示例:
#num,str,num
1,Hello \
Word,1990
2,Yes,1991
样式3的示例:
#num,str,num
1,Hello \nWorld,1990
2,Yes,1991
答案 1 :(得分:8)
您需要使用"\r"
。您不能在单引号字符串中使用转义字符(\'
除外)。 '\n'
和'\r'
是字面反斜杠,后跟n
或r
,而"\n"
和"\r"
分别是换行符和回车符。< / p>
至于在CSV文件中插入新行,这取决于您的实施。 CSV没有标准,因此您必须根据要提供CSV数据的系统确定要使用的格式。有些人可能接受'\n'
序列并将其解释为新行,其他人可能允许使用文字换行符,前提是单元格用引号括起来,还有一些人根本不接受新行。
答案 2 :(得分:1)
可以看到以下内容:
one, two, three[CR][LF]
abc,"a[LF]
b[LF]
c",abc[CR][LF]
希望这更加明确。