16

所以我有一条线我想做一个 fputcsv 有一些整数(我需要被视为字符串,但它们是数字)。这些整数的前导零在我执行 fputcsv 时会被截断,但我不希望这种情况发生,有什么办法解决这个问题吗?我尝试将变量键入为(字符串)并将我的变量放在引号中,但到目前为止我发现的唯一方法是在整个数字周围加上引号,这导致引号在我打开它时显示在 csv 文件中excel,我不想发生。有谁知道让这个工作的方法?我认为 fputcsv 只是出于某种原因自动为这个变量分配一个类型,并使它成为一个整数或其他东西......

编辑示例文本:

我的 fputcsv:

02305109

我在 excel 中打开的 csv 文件中得到了什么:

2305109

但是当我只使用 vi 打开所述 csv 文件时,前导零仍然存在。真的很奇怪。

4

9 回答 9

27

对于我想要作为字符串的长数字,我遇到了同样的问题。用单引号括起来并使其可评估。

'="' . $yourNumber . '"'

于 2016-12-08T21:16:00.480 回答
4

尝试在前导零整数前添加(或附加)一个空字符。

$csv[0] = 02392398."\0";
于 2013-07-02T15:20:56.717 回答
3

Excel 将值解释为数字并将其格式化。这与php无关。

这个 SU 帖子有一些信息:https ://superuser.com/questions/234997/how-can-i-stop-excel-from-eating-my-delicious-csv-files-and-excreting-useless-da

于 2012-07-10T18:38:38.350 回答
1

将其输出为公式,例如:

$line["phone"]= "=\"" .$line["phone"]. "\"";

于 2016-10-03T11:43:21.527 回答
1

我的代码太简单了

//header utf-8
fprintf($fh, chr(0xEF).chr(0xBB).chr(0xBF));
fputcsv($fh, $this->_head);
$headerDisplayed = true;
//put data in file
foreach ( $this->_sqlResultArray as $data ) {
    // Put the data into the stream
    fputcsv($fh, array_map(function($v){
        //adding "\r" at the end of each field to force it as text
        return $v."\r";
    },$data));
}
于 2018-04-26T07:49:26.850 回答
0

将单引号添加到数据的开头将解决问题。

即 '930838493828584738 而不是 930838493828584738 转换为此 934E+n

如果 csv 文件是由第三方提供的,这可能是个问题。

于 2017-10-25T13:04:04.820 回答
-1

使用格式化列"00000000"

这样做的好处是它会在保存时保留格式

于 2012-07-10T18:43:29.523 回答
-1

您只需要在数字的开头添加一个引号:

'123456

并且excel不会将此单元格格式化为数字。

于 2013-11-11T11:17:46.623 回答
-2

尝试使用前导撇号(单引号)。IIRC 保留前导零但不出现在 Excel 中。

于 2012-07-10T18:25:16.583 回答