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