PHP导出到CSV文件在Excel 2007和2010中有不同的行为

我试图使用PHP的fputcsv函数将数组导出到CSV文件。 不过,在Excel 2007和2010中打开文件时,我会遇到两种完全不同的行为。

在Excel 2007中,我得到了我想要的,因为所有的字段都在它自己的独立列中,如下所示:

aaa | bbb | ccc | DDDD

123 | 456 | 789

“aaa”| “bbb”|

但在Excel 2010中,所有的字段都是这样的:

AAA,BBB,CCC,DDDD
123,456,789
“AAA”, “”, “BBB” “”

如何获得Excel 2007和2010的Excel 2007行为?

我用了下面的脚本:

$filename = "test.csv"; //header("Content-Type: application/vnd.ms-excel;"); header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header("Pragma: no-cache"); header("Expires: 0"); $list = array ( array('aaa', 'bbb', 'ccc', 'dddd'), array('123', '456', '789'), array('"aaa"', '"bbb"') ); $fp = fopen("php://output", 'w'); foreach ($list as $fields) { fputcsv($fp, $fields); } fclose($fp); 

我试过使用头(“Content-Type:application / vnd.ms-excel;”); 或标题('Content-Type:text / csv'); 但我得到同样的行为。 :S

先谢谢你。

编辑:我刚刚结束了使用PHPExcel。 这是一个伟大的图书馆!

有一个设置来改变在Excel中的分隔符,将其设置为','字符,它将工作。

阅读: http : //office.microsoft.com/en-gb/excel-help/import-or-export-text-txt-or-csv-files-HP010099725.aspx#BMimport_data_from_a_text_file_by_openi

这不是PHP的错; 这是Excel导入CSV文件时的错误。

Excel的CSV处理中有许多错误(或者更准确地说,当您双击CSV文件的图标以在Excel中打开它时,默认的CSV处理)。

一个常见的问题是UTF-8:UTF-8编码的CSV文件中的Excel扼stream圈。 检查编码; 如果要将文件保存为UTF-8,请尽可能切换到标准ASCII。

可能导致问题描述的另一个问题是如果您的Excel具有使用逗号作为小数点分隔符的区域设置。 这使Excel能够读取CSV文件,因为它将逗号视为字段值的一部分。

几乎所有的问题都可以通过在Excel中打开文件来解决,而不是双击文件的图标。 以这种方式打开CSV文件将导致Excel引导您通过它的文本导入向导,它允许您指定文件格式,以便Excel将正确打开它。 这是不理想的,但对于一些CSV文件,即使是那些看起来相当标准的文件(不pipe是否用PHP创build),这是唯一的select。

希望有所帮助。