近期在项目中做到了导出Excel功能,但是由于项目PHP版本为5.4,网上找了一大堆的插件或扩展由于封装发布版本较新,不支持PHP5.4版本,大多支持PHP7.0以上的版本,并且加上本身需要导出的数量比较少,可以采用下面原生导出Excel方法。

/**
* 创建 Excel 表格
* @param $list | 需要进行创建Excel的二维数组
* @param $filename | Excel文件名
* @param array $header | Excel头部中文名称
* @param array $index | 对应二维数组中键名
*/
protected function createtable($list,$filename,$header=array(),$index=array()){
header("'Access-Control-Allow-Origin': '*'"); //允许跨域
header("Content-type:application/vnd.ms-excel"); //格式为excel导出
header("Content-Disposition:filename=".$filename.".xls");
$teble_header = implode("\t",$header);
$strexport = $teble_header."\r";
foreach ($list as $row){
foreach($index as $val){
$strexport.=$row[$val]."\t";
}
$strexport.="\r";
}
//$strexport=iconv('UTF-8',"GB2312//IGNORE",$strexport); $strexport=iconv('GB2312',"UTF-8//IGNORE",$strexport);
exit($strexport);
}
/**
* 获取Excel方法函数
*/
public function getExcel(){
// 使用其封装方法
$filename = '历史订单记录'.date('YmdHis');
$header = array('订单ID','用户ID','订单用户电话');
$index = array('Order_id','User_id','Order_Phone');
$this->createtable($data,$filename,$header,$index);
}

其中$data参数为包含表头参数的二维数组,类似

$data = [
['Order_id'=>1,'User_id'=>1,'Order_Phone=>1],
['Order_id'=>2,'User_id'=>2,'Order_Phone=>2],
];

:如果要将查询结果导出到Excel,只需将页面的Context-Type修改一下就可以了:
header( "Content-Type: application/vnd.ms-excel">
如果希望能够提供那个打开/保存的对话框,Content-Disposition参数,Content-Disposition参数本来是为了在客户端另存文件时提供一个建议的文件名,但是考虑到安全的原因,就从规范中去掉了这个参数
Content-Disposition参数:
attachment --- 作为附件下载    inline --- 在线打开
具体使用如:header("Content-Disposition: inline; filename=文件名.mp3");   Header("Content-Disposition:attachment;filename=test.xls");