【发布时间】: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