所以我有一行要对它执行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中。