最近在用phpexcel做一个报表模板,把用户数据做一些处理,然后导出excel供客户查看。
现在遇到了些问题:
1.耗时问题
经过测试生成一个10000行、6列的只含一个sheet的excel,总共需要耗时26秒多
我把代码内部各部分耗时都打印出来了,发现填充sheet里cell的值和样式很费时,两个加起来要11秒;
还有一个就是保存到本地文件里save('test.xls','Excel5')时间花得也很长需要15秒(不知道为什么这么长)。
填充sheet里cell的值我使用的是phpexcel里的fromArray方法,设置样式也是使用getCell($cellRange)来做的,
请问还有优化的点的方法,能缩短时间吗?2内存使用问题
上面的情况我代码使用内存最高峰有103m,数据量在大点那就无法想象了,我的数据都是保存在数组中的,
和这个有关吗?有什么好的建议吗?请帮帮忙,先谢谢了!

解决方案 »

  1.   

    from array?也就是先生成一个很大的数组然后插入么?不是可以循环插入的么?我之前做过导出约50 0000条数据的excel.确实时间会比较长(10多个sheet,大约30s左右),内存占用也很恐怖。据说新版的phpexcel加入了单元格缓存的功能,可能会对性能提升有所帮助。
      

  2.   

    fromArray是phpexcel内置的一个方法,如下:
    $active_sheet->fromArray($data,NULL,'A1');数据存在$data这个二级数据里,这个方法就会把内容自动
    填充到单元格,我看了看内部实现,也是一样的循环插入。单元格缓存这个功能怎么说呢,我试过,但是内存的使用减少是以牺牲时间为代价的,我用了如下代码:$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;
    $cacheSettings = array( 'memoryCacheSize ' => '64MB');
    PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);内存使用量从原来的103m减少到了73m,执行时间上又多花了1秒,从原来的26秒增加到36秒。
    本来原来时间就已经让人不能接受了,现在更长了,这两者之间的平衡点很难把握啊。你导出500000条数据的excel 只要30s!  而我现在10000条数据就26s了,我不知道是代码和机器配置因素哪个占得多一点,但如果我有你这个速度,我就满意了。能发下你是怎么样填充单元格内容的吗?
      

  3.   

    能用csv格式的,就不需要我的代码了, 我也不用纠结了。
      

  4.   

      怎么会这么长呢? 我用phpExcel 导出10000条是12S。