1. 程式人生 > >php匯出excel表格檔案

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表格樣例如下