fputcsv和整数类型转换为字符串

时间:2012-07-10 18:10:38

标签: php excel csv fputcsv

所以我有一行,我想做一个有一些整数的fputcsv(我需要把它当作字符串处理,但它们是数字)。当我执行fputcsv时,这些整数有前导零被切断,但我不希望这种情况发生,有什么方法可以解决这个问题吗?我尝试将typcasting作为(字符串)并将我的变量放在引号中,但到目前为止我找到的唯一方法就是在整个数字周围加上引号,这样当我打开它时,引号就会显示在csv文件中excel,我不想发生。有没有人知道如何使这个工作?我认为fputcsv只是出于某种原因自动为这个变量分配一个类型并使它成为一个整数或者什么......

编辑示例文字:

我fputcsv:

02305109

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

2305109

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

9 个答案:

答案 0 :(得分:16)

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

'=“'。$ yourNumber。'”'

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

尝试使用空字符前置(或附加)前导零整数。

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

答案 3 :(得分:1)

将其输出为公式,如下:

$ line [“phone”] =“= \”“。$ line [”phone“]。”\“”;

答案 4 :(得分:0)

在数据开头添加单引号可以解决问题。

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

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

答案 5 :(得分:0)

我的代码太简单了

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

答案 6 :(得分:-1)

尝试一个主要的撇号(单引号)。 IIRC保持前导零但不出现在Excel中。

答案 7 :(得分:-1)

使用"00000000"

格式化列

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

答案 8 :(得分:-1)

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

'123456

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