求职季折扣促销: 批量购买,优惠多多 🎉🎉🎉 查看详情

yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法

博主推荐:yii2实战式教程是一套简单易学、幽默风趣、干货多多、众人大赞的高质量教程,囊括 yii2基础入门、yii2高级进阶的很多知识点,可以说是迄今最好的yii2系列教程,真的不容错过哦~

先概括下我们接下来要说的大致内容:

数据列表页面导出excel数据,

1、可以根据GridView的filter进行搜索数据并导出

2、可以自行扩展数据导出的时间直接导出数据

//先来看controller层,接收GridView参数并做拼接处理

php controller

//传参导出
$paramsExcel = ''; //这个参数是控制接收view层GridView::widget filter的参数
if ( ($params = Yii::$app->request->queryParams) )
{
    if ($params && isset($params['xxSearch']) && $params['xxSearch'])
    {
        foreach ($params['xxSearch'] as $k => $v) 
        {
            if ($v)
            {
                $paramsExcel .= $k.'='.$v.'&';
            }
        }


    }
    $paramsExcel = rtrim($paramsExcel, '&');
}

//看view层我们需要做什么

php 输入页面上的html按钮

<div style="margin-bottom: 30px;">
        <?= Html::a("导出", "javascript:ed();", ["class" => "btn btn-success"]) ?>
        开始时间:<input type="text" name="start_time" />
        结束时间:<input type="text" name="end_time" />
</div>

上面javascript:ed()方法如下,注意这里我们拼接了controller层传递过来的参数,并自行扩展了时间进行搜索数据

//数据导出
function ed ()
{
    var paramsExcel = "<?php echo $paramsExcel; //controller传递过来的参数?>", 
        url = "/xx/export-data", //此处xx是控制器
        startTime = $.trim($("input[name=start_time]").val()), 
        endTime = $.trim($("input[name=end_time]").val()),
        temp = "";
    //需要把view层GridView::widget filter的参数与我们自行扩展的参数拼接融合
    if (paramsExcel)
    {
        temp += "?"+paramsExcel;
        if (startTime)
            temp += "&start_time="+startTime;
        if (endTime)
            temp += "&end_time="+endTime