我正在尝试使用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。这是一个很棒的图书馆!!答案 0 :(得分:1)
有一个设置可以更改excel中的分隔符,将其设置为','字符,它将起作用。
答案 1 :(得分:1)
这不是PHP的错;导入CSV时垃圾是Excel的错误。
Excel的CSV处理存在许多错误(或者更准确地说,当您双击CSV文件的图标以在Excel中打开它时,默认的CSV处理。)
一个常见问题是UTF-8:Excel对UTF-8编码的CSV文件进行扼流。检查编码;如果您将文件保存为UTF-8,请尽可能切换到标准ASCII。
可能导致所述问题的另一个问题是,您的Excel是否具有使用逗号作为小数分隔符的区域设置。这会破坏Excel读取CSV文件的能力,因为它将逗号视为字段值的一部分。
几乎所有问题都可以通过从Excel中打开文件来解决,而不是双击文件的图标。以这种方式打开CSV文件将导致Excel引导您完成文本导入向导,该向导允许您指定文件格式,以便Excel正确打开它。它并不理想,但对于某些CSV文件,即使它们看起来很标准(无论它们是否是用PHP创建的),它都是唯一的选择。
希望有所帮助。