使用PHP導出數據庫內容到Excel表格

使用PHP導出數據庫內容到Excel表格

首先根據需求要分爲用戶信息,商家信息,團單信息,優惠券信息,訂單信息導出,我是用的下拉列表通過onchange事件執行ajax請求到控制器處理,之後輸出到視圖層,如下:

<select id="downtype" name="downtype" onchange="ajaxchangetype()">
    <option value="0">--請選擇--</option>
    <?php if(isset($type)){foreach($type as $k => $v){?> <!--下載的分類是從配置文件加載進來的-->
        <option value="<?php echo $k?>"><?php echo $v?></option>
    <?php }}?>
</select>

<script type="text/javascript">
    function ajaxchangetype()
    {
        var type = $("#downtype").val();
        $.ajax({
            url:'',
            type:'post',
            async:true,
            data:{
                type:type,
            },
            dataType:'text',
            success:function(data){
                if(isNaN(data))
                {
                    $("#citylist").html(data);
                    $("#down").html("<input type='submit' class='formbutton' value='下載'>");
                }else
                {
                    window.location.reload();
                }
            },
        })
    }
</script>

控制器部分

//獲取所有城市和地區
$allcities = Category::getCategoryList('city');
foreach($allcities as $k=> $v)
{
    $allcities[$k]['child'] = Category::getCategoryList('area', $v['id']);
}
$list = [];
//把用來顯示城市聯動的html都存進$list中
foreach($allcities as $k => $v)
{
    $list[] = "<option value='".$v['id']."'>".$v['name']."</option>";
    foreach($v['child'] as $v2){
        $list[] = "<option value='".$v2['id']."'>|---".$v2['name']."</option>";
    }
}
//前臺通過onchange事件傳不同的參數進這個方法,對每個參數進行處理後通過ajax顯示到視圖

$datalist = "用戶ID:<input type='number' name='#'/><br><br>城市列表:<select id='#' name='#'><option value='0'>全部地區</option>".implode($list)."</select>";
exit($datalist);
//通過switch case 對不同的參數處理,就不一一列舉了

表單提交後的控制器

case "partner":
//商家信息下載 
if(!empty($_POST['partnername'])){$where['你的數據庫字段名'] = $_POST['partnername'];}
if(!empty($_POST['cityid'])){$where['你的數據庫字段名'] = $_POST['cityid'];}
//根據表單提交的值到相應的model查詢,返回數據
if(empty($where))
{
    $partnerlist = Partner::getPartnersDownload();//進入你的模型取出需要的數據
}else
{
    $partnerlist = Partner::getPartnersDownload($where);
}
if(empty($partnerlist))
{
    exit("未找到商家信息");
}
//配置excel的列表頭如
$kn = array('id' => '商家ID','name' => '商家名稱')等;
//導出文件的文件名,我習慣是一個字符串_時間的格式
$name = "你喜歡就好_".date('Ymd');
down_excel($partnerlist, $kn, $name);//執行導出函數
break;

最後執行導出的函數

/**
 * 數據導出到Excel
 * @param [arr] $data 導出數據 
 * @param [arr] $keynames 列表頭 
 * @param [string] $name 文件名   
 * @param [string] $index 控制excel起始ID 
 */
function down_excel($data, $keynames, $name,$index=0){
    $xls[] = "<html><meta http-equiv=content-type content=\"text/html; charset=UTF-8\"><body><table border='1'>";
    $xls[] = "<tr><th>ID</th><th>" . implode("</th><th>", array_values($keynames)) . '</th></tr>'; //輸出excel列表頭
    foreach($data As $o){
        $line = array(++$index);
        foreach($keynames AS $k=>$v){
            $line[] = $o[$k];
        }
        $xls[] = '<tr><td>'. implode("</td><td>", $line) . '</td></tr>'; //通過循環輸出內容
    }
    $xls[] = '</table></body></html>';
    $xls = join("\r\n", $xls);
    header('Content-Disposition: attachment; filename="'.$name.'.xls"'); //生成文件
    die(mb_convert_encoding($xls,'UTF-8','UTF-8')); //字符編碼轉換
}

導出的優惠券表效果還不錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章