首页 > 开发 > php > 正文

php怎么导出大量数据的Excel

2017-09-06 15:07:19  来源:网友分享

比较常用的是用PHPExcel,1万左右数据还行,但是数据到达100万左右,PHPExcel就显的很无助,搜索了下比较常用的是使用php的fputcsv,不知道还有什么办法能导出比较大量数据的excle


刚刚测试了下fputcsv,发现全部挤到A中,无法换到B中

2012年9月2日添加
03版的确实是有限制的,格式php的csv的是不是用excel打开只会出现在A列上面?

2012年9月2日添加
我觉得我非常有必要说下为什么会有这个需求,一个大点的品牌公司,一年左右的订单,超过100万是很正常的,年末的时候他们的业务人员会根据订单进行各种分析,每个公司的分析角度又是不一样的,所以把所有订单导出来给业务人员是一个最简单的办法,为什么要导出excle,是因为对于业务人员来说这个是最常用的,你也不可能去帮助那么多家的公司开发这样那样的报表。
所以也就有了这个需求,怎么导出超过100万甚至1000万数据excle的问题

解决方案

  1. PHP从数据库分多次读取100万行记录,和分多次将100万行写入文本文件都没问题
  2. Excel可以支持100万行记录,Excel 2003最大支持65536行,从2007版开始支持104万行了,目前2007的盗版应该比较普及了-_-! 问清楚你的客户是什么版本。
  3. 你要导出excel的理由是非常充分和正确的,应该继续坚持。业务人员最熟悉的就是Excel,实在不熟悉现学现用也比别的快。只是要注意,当数据量达到10万行这个级别时,Excel的公式填充将会非常非常慢,如果再有LOOKUP()公式,基本上十分钟内处理CPU满载进程管理器杀不掉的状态,这时候其实xampp + phpmyadmin是一个易用性和性能都最平衡的选择
  4. PHPExcel输出的是Excel XML格式,有个XML头和尾,中间是数据Body,需要将100万行都赋值给一个数组才可以调用PHPExcel->write(),这容易导致PHP执行超时或者内存超限,你不妨调整一下php.ini配置,把超时时间和内存限制都改到很大
  5. 如果是输出csv格式,那就太简单了,你的问题可能是没给字段内容加引号,加上引号再调用fputcsv试试?其实fputcsv做的事情特别简单,你甚至可以不管它,自己把CSV文件的每一行拼接好了之后用file_put_contents写入

最后给你看一个phpmyadmin导出的CSV示例,对照你自己生成的CSV示例,看看哪里不一样。