我正在将数据导出到一个CSV文件中,但是有一个值"11e5“被Excel解释为一个数字。它不显示文本,而是在Excel电子表格上显示1.10E+06。
我试过用撇号作为值的前缀,但在中显示为1100000。
下面是我用来测试的代码,实时代码从MySQL获取数据。
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){
$now = gmdate("D, d M Y H:i:s");
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename={$filename}");
header("Content-Transfer-Encoding: binary");
}
$row1 = array ('Assignment name', 'tet4' );
$row2 = array ('Class name','11e5' );
$row3 = array ('Name', 'Target', 'Start grade', 'End Grade', 'Avarage grade', 'May', 'June', 'July', 'August','06th Aug', '13th Aug', '20th Aug', '27th Aug', '03rd Sep', 'Last 7 days', 'Last 24 hours', 'Total points' );
$row4 = array ('Maan Roy', 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 32 );
$row5 = array ( 'mac mac', 0, 1, 2, 1.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 98 );
$response = array();
array_push($response, $row1);
array_push($response, $row2);
array_push($response, $row3);
array_push($response, $row4);
array_push($response, $row5);
download_send_headers("data_export_" . date("Y-m-d") . ".csv");
echo array2csv($response);
发布于 2018-09-06 09:47:19
编辑您的代码以输出类似于="11e5"
的值,它应该工作得很好。在Mac上用Excel 2016进行测试,但在Windows上的行为应该是一样的。
看这个post on SU。
发布于 2018-09-06 04:00:25
CSV文件格式不明确支持元数据,而且MSExcel有一个非常恼人的习惯,认为任何看起来像数字的东西都是数字(它还去掉了前导零,可以插入逗号)。而且,更糟的是,它改变了数据,而不是仅仅以不同的方式呈现数据。
在手动导入中,可以通过为列指定“TEXT”类型来覆盖这种行为,但这不是一个很好的解决方案。
如果您想要无缝的用户体验,那么您将需要使用不同于CSV的不同格式(或者不使用MSExcel?)。您可以使用标准工具编写XML,并且有一些库用于生成类似于xlsx的文件(尽管IME通常会抱怨后者仍然采用错误的格式,尽管它将按预期的方式加载和呈现数据)。
https://stackoverflow.com/questions/52201606
复制