相关疑难解决方法(0)

为Excel生成CSV文件,如何在值中包含换行符

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

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

我现在生成的文件如下所示:(在UTF8中,非英文文本混合在一起并且有很多行)

Header1,Header2,Header3
Value1,Value2,"Value3 Line1
Value3 Line2"
Run Code Online (Sandbox Code Playgroud)

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

根据我在网上发现的这应该有效,但它没有,至少没有赢得Excel 2007和UTF8文件,Excel将第3行视为第二行数据而不是第一行数据的第二行.

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

谢谢

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

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

csv excel newline

146
推荐指数
6
解决办法
32万
查看次数

fputcsv和换行符代码

我在PHP中使用fputcsv输出数据库查询的逗号分隔文件.在Ubuntu中打开gedit中的文件时,它看起来是正确的 - 每个记录都有一个换行符(没有可见的换行符,但你可以告诉每个记录是分开的,在OpenOffice电子表格中打开它可以让我正确地查看文件.)

但是,我们将这些文件发送到Windows上的客户端,并且在他们的系统上,该文件作为一个很长的行.在Excel中打开它,根本无法识别多行.

我在这里读了几个非常相似的问题,包括这个问题,其中包含一个真正信息丰富的Great Newline Schism解释的链接.

不幸的是,我们不能告诉客户在"更智能"的编辑器中打开文件.他们需要能够在Excel中打开它们.是否有任何编程方式来确保添加正确的换行符,以便可以在任何操作系统上的电子表格程序中打开该文件?

我已经在使用自定义函数强制所有值的引号,因为fputcsv对它有选择性.我尝试过这样的事情:

function my_fputcsv($handle, $fieldsarray, $delimiter = "~", $enclosure ='"'){

        $glue = $enclosure . $delimiter . $enclosure;

    return fwrite($handle, $enclosure . implode($glue,$fieldsarray) . $enclosure."\r\n");

}
Run Code Online (Sandbox Code Playgroud)

但是,当在Windows文本编辑器中打开文件时,它仍然显示为单个长行.

php newline fputcsv

28
推荐指数
4
解决办法
3万
查看次数

标签 统计

newline ×2

csv ×1

excel ×1

fputcsv ×1

php ×1