1

我在页面上有一个链接,单击该链接时,使用 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();
}
4

4 回答 4

1

不确定 Excel,但如果引用 CSV 字段,LibreOffice 和 OpenOffice 会将字段作为字符串导入。例如,您希望 CSV 类似于:

foo,bar,"12345",baz

(您可能还必须在文件打开对话框中选中“引用字段为文本”选项。)

编辑:PHP 的 fputcsv() 函数只会在需要时使用引号包装器,因此您可能必须自己手动强制在实际字段值周围加上引号:

$field = 12345;
$quoted_field = '"' . $field . '"';

编辑 2:如果您不需要担心转义,这可能对您有用,而不是 fputcsv():

fwrite($fp, '"' . implode($fields, '","') . '"' . "\n");
于 2013-10-09T17:20:01.390 回答
0

您可以使用 strval 将值转换为字符串。

于 2013-10-09T17:42:42.837 回答
0

尝试在您的 fputcsv 之前将您的 int 强制转换为字符串。

例如

$foo = "$foo";

http://php.net/manual/en/language.types.type-juggling.php

但是,当您将 CSV 转换为 Excel 格式时,Excel 可能会再次下定决心......

这个问题也可能有帮助:Excel CSV - Number cell format

于 2013-10-09T17:04:14.147 回答
0

使用 :- 字符串、strval 或用双引号/单引号括起来的值,甚至用变量连接空格将整数转换为字符串都不起作用,因为 CSV 不包含字段类型信息。

我发现的唯一方法是添加一些字符或符号以强制使其成为字符串,但这也会显示在输出中。

于 2018-01-18T15:32:14.780 回答