fputcsv和integer类型转换为字符串


fputcsv and integer typcasting to string

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

编辑示例文本:

我所看到的:

02305109

我在excel中打开的csv文件中得到的内容:

2305109

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

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

'="'.$yourNumber.'"'

尝试在前导零整数前加一个null字符。

$csv[0] = 02392398."'0";

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

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

将其作为公式输出,如:

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

太简单了,我的代码是

//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));
}

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

'123456

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

在数据开头添加一个引号将解决问题。

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

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

使用"00000000" 格式化列

这样做的优点是,它将在保存时保留格式

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