一般用phpexcel导出海量数据时非常慢,而且动不动就内存溢出,但是PHPEXCEL对表格的单元格布可以布局,如果数据不大比如固定表格,复杂表头,颜色有要求等可以使用PHPEXCELphpexcel慢在setCellValue方法经过测试生成一个10000行、6列的只含一个sheet的excel,总共需要耗时26秒多我把代码内部各部分耗时都打印出来了,发现填充sheet里cell的值和样式很费时,两个加起来要11秒; 另外有一种方法更加简单,代码逻辑和phpexcel基本一致,而且不用插件,只要一个函数即可以下是实现方法 * @creator Jimmy * @data 2018/1/05 * @desc 数据导出到excel(csv文件) * @param $filename 导出的csv文件名称 如date("Y年m月j日").'-test.csv' * @param array $tileArray 所有列名称 * @param array $dataArray 所有列数据 */ public function exportToExcel($filename, $tileArray=[], $dataArray=[]){ ini_set('memory_limit','512M'); ini_set('max_execution_time',0); ob_end_clean(); ob_start(); header("Content-Type: text/csv"); header("Content-Disposition:filename=".$filename); $fp=fopen('php://output','w'); fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));//转码 防止乱码(比如微信昵称(乱七八糟的)) fputcsv($fp,$tileArray); $index = 0; foreach ($dataArray as $item) { if($index==1000){ $index=0; ob_flush(); flush(); } $index++; fputcsv($fp,$item); } ob_flush(); flush(); ob_end_clean(); } 调用方法: function expexcel (){ //表头定义: //表身数据。这里是TP5的写法 $list = DB::name('service a')->join('rma b','a.orderid=b.orderid','inner'->where('a.delete',0)->select(); //这里循环一遍是从新定义以下数据和表头一一对应,数据格式需要转换也一并处理 $v['stationname']."(".$v['status'].")", ] //直接调用函数,文件名,表头数组,表身数据 } } |
|