php匯出excel表格檔案
一般來講這個需求很少用到,但是有時候客戶有這種要求,用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表格樣例如下