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

时间:2013-03-07 11:24:49

标签: php excel csv fputcsv

我正在尝试使用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。这是一个很棒的图书馆!!

2 个答案:

答案 0 :(得分:1)

有一个设置可以更改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

答案 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创建的),它都是唯一的选择。

希望有所帮助。