使用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')); //字符编码转换
}

导出的优惠券表效果还不错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值