通过php在csv单元格中创建回车符

时间:2010-10-26 16:40:49

标签: php mysql csv openoffice.org

我正在尝试动态生成一个csv文件,其中包含一些包含多行的单元格,例如,地址字段需要分组到一个“地址”单元格而不是地址,城市,州等。所有都是顺利但最近两天我试图插入\ r,\ r \ n,\ n,chr(10),chr(13),以及代码中的回车来创建回车我正在寻找细胞内。所有这些都失败了,或者在我的csv中打印为“\ r \ n”等,或者当我在代码中进行手动回车时它会生成一个新行。我正在使用它在我的单元格中创建中断,但它无法正常工作

$groupedCell = implode('\r',$data);

我很确定代码是正确的,因为它的放置\ r \ n我希望回车但不是我正在寻找的实际回报。我尝试了一些不同的编码,但仍然没有运气,我在Open Office测试,我想这可能是问题,但我认为它可以处理单元格内的回车,我没有看到任何文档支持否则。谢谢你的阅读!

3 个答案:

答案 0 :(得分:18)

CSV spec是我发现的以多种不同的方式实现的......基本上看起来它只有一半是令人沮丧的,因为它很受欢迎。

要在CSV中的单元格中包含换行符,可能需要对单元格进行换行,或者可能需要对换行符进行转义。你会从链接文档中注意到有三种方法可以做到这一点 - 不同的程序对待它的方式不同:

  1. Excel将整个单元格用双引号括起来:一个单元格可以在其中包含(未转义)换行符并被视为单个单元格,只要它用双引号括起来(注意你也需要使用excel-style)双引号在单元格内容中转义)
  2. 其他程序在字符前插入一个反斜杠,因此以\结尾的行不被视为行的结尾,而是单元格中的换行符。只要单元格前面有反斜杠字符,单元格就可以包含未转义的换行符。
  3. 其他人仍然会使用C风格字符转义替换换行符,即实际字符序列\n\r\n。在这种情况下,单元格已完全转义换行符。
  4. 可能需要逃避控制字符(以及其他内容(例如#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'是字面反斜杠,后跟nr,而"\n""\r"分别是换行符和回车符。< / p>

至于在CSV文件中插入新行,这取决于您的实施。 CSV没有标准,因此您必须根据要提供CSV数据的系统确定要使用的格式。有些人可能接受'\n'序列并将其解释为新行,其他人可能允许使用文字换行符,前提是单元格用引号括起来,还有一些人根本不接受新行。

答案 2 :(得分:1)

  1. 创建了包含3列的Excel 2010工作表。
  2. 添加了一个带有文字值的标题行:一,二,三
  3. 添加了1个带有文字值的数据行:abc,abc,abc,除了在第二列中我在每个字母后面按ALT + ENTER创建回车和换行符。
  4. SAVE AS&gt;其他并选择CSV而忽略警告。
  5. 使用NOTEPAD ++检查了CSV数据,然后点击工具栏中的显示所有字符按钮。
  6. 可以看到以下内容:

    one, two, three[CR][LF]
    abc,"a[LF]
    b[LF]
    c",abc[CR][LF]
    

    希望这更加明确。