PHP原生代码导出EXCEL功能

xiaoxiao2021-02-28  131

一、撰写函数 /** * 导出报表功能 * @param $dataArr 数据源 (二维结构); * @param $fieldArr 字段信息(一维数组,键值存放$dataArr中存在的key名,对应的value存放要导出表头的字段名称) ; * @param $tname excel表名(默认自动在最后加上导出的时间戳); * @author qingfeng.guo * 2016-06-21 */ function exportExcel($dataArr,$fieldArr,$tname="报表导出") { if(!is_array($fieldArr) || empty($fieldArr)) die("导出异常,请重试!"); if(!empty($dataArr) && count($dataArr) > 10000) die("单次导出的数据量过大(≥10000条),请分批导出!"); $thead = ''; //表头 $tbody = ''; //表数据 $ttail = ''; //表尾 $clos = count($fieldArr); //列数(字段量) //生成表头 $thead .= '<tr>'; foreach($fieldArr as $k => $v) { $thead .= '<td style="color:#fff;background-color:green;">'.$v.'</td>'; } $thead .= '</tr>'; //生成表尾 $ttail = '<tr><td colspan="'.$clos.'"> 报表内容:'.$tname.' , 导出时间:'.date("Y-m-d H:i:s").' </td></tr>'; //生成需要导出的数据源 $datas = array(); foreach($dataArr as $k => $v) { $fieldFormat = $fieldArr; //这里需要复制原本的字段格式,以防标题和内容没对应上 if(!empty($v) && is_array($v)) { foreach($v as $k2 => $v2) { //根据key值决定当前字段是否需要导出 if(array_key_exists($k2, $fieldArr)) { $fieldFormat[$k2] = $v2; } } } $datas[] = $fieldFormat; } //生成表体 foreach ($datas as $k => $v) { $tbody .= '<tr>'; foreach($v as $k2 => $v2) { if(!is_numeric($v2)) { $tbody .= '<td style="vnd.ms-excel.numberformat:@">'.$v2.'</td>'; }else{ $tbody .= '<td>'.$v2.'</td>'; } } $tbody .= '</tr>'; } $content = $thead.$tbody.$ttail; header("content-type:application/vnd.ms-excel; charset=utf8"); header("Content-Disposition:attachment;filename={$tname}".time().".xls"); echo "<table align='center' border=1 bgcolor='F8F7ED'>"; if(mb_detect_encoding($content) != 'UTF-8') { echo iconv('UTF-8',"GB2312",$content); }else{ echo $content; } echo "</table>"; } 二、调用例子 //自定义字段名称 $fieldArr = array( 'goods_id' => '商品编号', 'goods_name' => '商品名称', ); exportExcel($list, $fieldArr,'游戏商城订单报表');
转载请注明原文地址: https://www.6miu.com/read-34472.html

最新回复(0)