0

我正在尝试使用 PHP 的 fputcsv 函数将数组导出到 CSV 文件。但是,在 Excel 2007 和 2010 中打开文件时,我得到了两种完全不同的行为。

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

啊!bbb | 抄送 | dddd

123 | 第456章 789

“啊啊” | "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);

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

先感谢您。

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

4

2 回答 2

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

希望有帮助。

于 2013-03-07T11:57:47.843 回答
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

于 2013-03-07T11:26:25.197 回答