一般来讲这个需求很少用到,但是有时候客户有这种要求,用phpexcel的话感觉没必要,完全可以直接利用php组成的html格式进行导出,既方便也不太耗费性能。
这个方法其中主要要运用到几个header头信息,这些头信息告知浏览器文件用于下载且格式为excel,并且告知其使用缓存的情况,基本常用的就下面几个。
header("Content-type:application/vnd.ms-excel");
content-type:数据类型 application/vnd.ms-excel为execel类型
header("Accept-Ranges:bytes");
Accept-Ranges:用于下载文件中告知浏览器是否接受断点续传。bytes:表示接受,none:表示不接受
header("Content-Disposition:attachment;filename=lala.xls");
Content-Disposition:是否以下载的方式打开资源,设置为附件下载填写attachment,和filename=文件名和后缀名
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
header("Pragma: no-cache");
cache-control只能应用于http1.1不能应用于1.0所以为了兼容,下方会特意加上pragma:no-cache来禁用cache
no-cache: 告诉浏览器、缓存服务器,不管本地副本是否过期,使用资源副本前,一定要到源服务器进行副本有效性校验
must-revalidate:告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。
header("Expires: 0");
过期时间为0,永不过期
php导出excel函数:
/**
* 导出excel
*@param $data 要导出的数据,是一个二维数组
*@param $title 导出excel表格里的标题,是一个数组
*@param $filename 下载的文件名
*@examlpe
*/
function excel($data=array(),$title=array(),$filename='report'){
header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=".$filename.".xls");
header("Pragma: no-cache");
header("Expires: 0");
$re.="<table border='1'><thead>";
if (!empty($title)){ //先循环出标题放入html的table表里
$re.="<tr>";
foreach ($title as $k => $v) {
$re.="<th style='background-color:rgb(189,215,238);'>".iconv("UTF-8", "GBK//IGNORE",$v)."</th>";
}
}
$re.="</tr></thead><tbody>";
if (!empty($data)){ //循环出数据放入html的table表里
foreach($data as $key=>$val){
$re.="<tr>";
foreach ($val as $ck => $cv) {
$re.="<td>".iconv("UTF-8", "GBK//IGNORE", $cv)."</td>";
}
$re.="</tr>";
}
$re.="</tbody></table>";
}
echo $re;
}
最后导出的样式如以下截图:
$title=array('标题1','标题2');
$data=array(
0=>array('数据1','数据2'),
1=>array('数据1','数据2'),
...
);
excel($data,$title,'ceshi');
得到的ceshi.excel表格样例如下