【问题标题】:Exporting CSV with UTF8 to Excel using PHP使用 PHP 将带有 UTF8 的 CSV 导出到 Excel
【发布时间】:2015-03-04 13:26:48
【问题描述】:

我的客户要求我构建一个导出系统,将整个 SQL 数据库导出到适用于 excel 的 csv 文件中。我找到了 PHPexcel,它很棒,但我认为我可以使用自己的函数更轻松、更快速地完成工作。

在与 Excel 编码斗争之后,我终于成功地使用以下代码导出了可以在 Excel 上工作的 CSV:

   <?php

    $data = showData("price"); //Function that loads all the SQL database into an array. 

    function array2csv(array &$array)
    {
       if (count($array) == 0) {
         return null;
       }
       ob_start();
       $df = fopen("php://output", 'w');
       fputcsv($df, array_keys(reset($array)));
       foreach ($array as $row) {
          fputcsv($df, $row);
       }
       fclose($df);
       return ob_get_clean();
    }

    function download_send_headers($filename) {
        // disable caching
        $now = gmdate("D, d M Y H:i:s");
        header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
        header("Last-Modified: {$now} GMT");
        header ( 'HTTP/1.1 200 OK' );
        header ( 'Date: ' . date ( 'D M j G:i:s T Y' ) );
        header ( 'Content-Type: application/vnd.ms-excel') ;
        header ( 'Content-Disposition: attachment;filename=export.csv' );
    }

    download_send_headers("export.csv");
    $final = array2csv($data);
    print chr(255) . chr(254) . mb_convert_encoding($final, 'UTF-16LE', 'UTF-8');
    die();

    ?>

问题是当我尝试在 Excel 中打开文件时,没有列。每行是一个大列,包含特定行的全部数据,用逗号分隔。 我发现我需要用 Excel 可以读取为“新列”的内容替换这些逗号。但我仍然需要让我的 CSV 保持原样工作。

我搜索了 SO 和 Google,但没有找到一个解决方案,可以保持我的 CSV 完整,但将数据拆分为 Excel 列。如果没有办法做到这两点,我认为对我的客户来说更重要的是 Excel 版本可以正常工作(每行分为列)。

这是它在 CSV 上的外观图片(在 Mac 上使用数字)

这是一张在 Windows 上的 Excel 2007 上显示的图片

【问题讨论】:

    标签: php csv character-encoding export-to-csv


    【解决方案1】:

    都在 fputcsv() 函数中:

    http://php.net/manual/en/function.fputcsv.php

    尝试选择正确的$delimiter$enclosure$escape_char

    在 excel 中用作字段分隔符的默认字符由区域设置设置。这意味着: 导入 CVS 文件可能取决于语言。从 excel 导出到 CSV 以查看它在您的系统上的作用,并检查您的客户端系统是否具有相同的设置。

    最好导出为 XML 而不是 CSV,因为这样可以规避这个问题:

    http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats

    【讨论】:

    • 我很傻,不检查基本的 fputcsv() 函数。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 2012-10-27
    • 2015-09-19
    • 2018-09-27
    • 2013-07-15
    • 2015-02-15
    • 1970-01-01
    相关资源
    最近更新 更多