注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

红尘若梦

生活的色彩

 
 
 

日志

 
 

php导出数据csv格式再用Excel打开超大数字变科学计数法显示且低位变0的解决方法  

2016-05-16 17:56:03|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
之前已经谈起过,使用php导出excel的方法有很多种,但是最简单也是最高效的还是使用php输出csv格式,只是输出页头时,需告知浏览器文件类型,然后再输出csv数据,相关示范代码如下:

<?
//输出页头
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=data.xls");
//输出表头,这里做了下编码转换
echo iconv("UTF-8","GB2312","序号\t网站名\t地址\t评价\n");
//开始输出数据
echo iconv("UTF-8","GB2312","11343045084239\t我上乐乐吧\t593668.com\t960311198504234518\n");
//退出
exit;
?>

可以看出,非常简单就可以输出csv,每列用"\t"来分隔,每行用"\n"来分隔。但是这种输出会有一个问题,那就是用Excel打开,如果数字大于12位,它会自动转化为科学计数法,且会将低位变0。那么要怎么解决这个问题呢?
网上提了很多办法,包括如下:
1)数字前面加“ ”
2)数字前面加=
3)数字前面加,
以上三种办法都试过,还是一样并不能够解决这个问题。但顺着这个思路,最终要让EXCEL认为数字是文本即可。那么可不可以尝试在数字前面加一个不可见字符呢,参考下ASCII码,从0-31开始尝试,最终得一个完美解决办法,将上述代码修改如下即可。

<?
//输出页头
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=data.xls");
//输出表头,这里做了下编码转换
echo iconv("UTF-8","GB2312","序号\t网站名\t地址\t评价\n");
//开始输出数据
echo iconv("UTF-8","GB2312","\x1f1343045084239\t我上乐乐吧\t593668.com\t\x1f960311198504234518\n");
//退出
exit;
?>

可以看出,即在超大数字前面加入一个不可见字符\x1f,这样EXCEL就不会将超过12位的数字转换成科学计数法显示且低位变0,而是直接将其当成文本来处理。其实除了\x1f之外,其它还有几种字符也可以,大家可以自行试试。





  评论这张
 
阅读(52)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017