分享

关于PHP导出excel方法汇总

 仴嗈鼋嗌鄦嶜 2020-09-25

一般用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 (){

//表头定义: 
$tableheader = array('维修站', '日期', '客户', '制单', '系统单号(状态)', '件数', '分类', ' 型号', '物品', '序号','出货时间','维修天数、出厂天数','故障描述/附件', '门店客户', '检测结果', '检测员', '保内保外','厂商保固','维修内容','维修员','故障归属','成本','发货时间','发货物流','发货单号','进度说明');

//表身数据。这里是TP5的写法

$list = DB::name('service a')->join('rma b','a.orderid=b.orderid','inner'->where('a.delete',0)->select();

//这里循环一遍是从新定义以下数据和表头一一对应,数据格式需要转换也一并处理 
 
foreach ($list as $k => $v) {
               $data[$k]=[

                 $v['stationname']."(".$v['status'].")",
                 date('Y-m-d', $v['createtime']),
                 $v['customerjname'],
                ...........

                  ]
}

//直接调用函数,文件名,表头数组,表身数据
 $this->exportToExcel('RMA_'.date('Y-m-d').'.csv',$tableheader, $data);
EXIT;

}





}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多