我在页面上有一个链接,单击该链接时,使用fputcsv将数据数组导出为csv。 当 Excel 显示数据时,有一列看起来像整数,但事实并非如此,Excel 正在将其转换为科学记数法。 如何导出数据,以便此列显示为字符(而不是科学数字(?
我用于导出的代码来自Alain Tiemblo在这里的回答:链接到代码
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();
}
不确定Excel,但如果CSV字段被引用,LibreOffice和OpenOffice会将字段作为字符串导入。例如,您希望 CSV 如下所示:
foo,bar,"12345",baz
(您可能还必须在文件打开对话框中选中"引用字段作为文本"选项。
编辑:PHP 的 fputcsv(( 函数只会在需要时使用引号包装器,因此您可能必须自己手动在实际字段值周围强制使用引号:
$field = 12345;
$quoted_field = '"' . $field . '"';
编辑 2:如果你不需要担心转义,这可能对你有用,而不是 fputcsv((:
fwrite($fp, '"' . implode($fields, '","') . '"' . "'n");
尝试在 fputcsv 之前强制 int 进入字符串。
例如
$foo = "$foo";
http://php.net/manual/en/language.types.type-juggling.php
但话又说回来,Excel 在将您的 CSV 转换为 Excel 格式时可能会自己决定......
这个问题也可能有所帮助: Excel CSV - 数字单元格格式
您可以使用 strval 将值转换为字符串。
使用 :- 将整数转换为字符串字符串,strval或双引号/单引号中的封闭值,甚至与变量连接空格都不起作用,因为CSV不保存字段类型信息。
我发现的唯一方法是添加一些字符或符号以强制使其成为字符串,但这也会显示在输出中。