文档章节

yii2 excel 導出方法

编译中ing
 编译中ing
发布于 2017/07/10 10:35
字数 468
阅读 4
收藏 0

1.前端頁面:

<?= Menu::isAction('/Test/test/export')?Html::a("<span class='text-center ml--5'>导出</span>", null,['id'=>'export']):'' ?>
<script>
    $(function () {
        $('#export').click(function () {
            layer.confirm('确定要导出***数据?',
                {
                    icon:2,
                    btn:['确定','取消']
                },
                function () {
                    if(window.location.href="<?= Url::to(['export',$search])?>"){
                        layer.closeAll();
                    }else{
                        layer.alert('导出****信息发生错误',{icon:0})
                    }
            },function () {
                    window.location.reload();
             });
        });
    })

</script>

2.控制器方法:

public function actionExport()
{
    $url = $this->findApiUrl() . $this->_url . "export";
    $queryParam = Yii::$app->request->queryParams;
    if (!empty($queryParam)) {
        $url .= "?" . http_build_query($queryParam);
    }
    $dataProvider = $this->findCurl()->get($url);
    $dataProvider=Json::decode($dataProvider);
    return  $this->getExcelData($dataProvider['rows']);
}
private function getExcelData($data)
    {
        //排除不要的数据
        foreach ($data as $key=>$val){
            unset($data[$key]['user_id']);    //獲取要導出數據表信息id
        }
        $headArr = [
            '**代碼',
            '**名稱',
            '**狀態',
            '**描述',
            '档案建立人',
            '建档日期',
            '最后修改人',
            '修改日期',
        ];
        $this->getExcels($headArr, $data);
    }
    private function getExcels($headArr, $data)
    {


        // 导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
//        import("Org.Util.PHPExcel");
//        import("Org.Util.PHPExcel.Writer.Excel5");
//        import("Org.Util.PHPExcel.IOFactory.php");
//        $staffModel=new StaffSearch();
        $date = date("Y_m_d", time()) . rand(0, 99);
        $fileName = "_{$date}.xls";
        // 创建PHPExcel对象,注意,不能少了\
        $objPHPExcel = new \PHPExcel();
        $objProps = $objPHPExcel->getProperties();

        // 设置表头
        $key = "A";

        foreach ($headArr as $v) {
            $colum = $key;
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
            if ($key == "Z") {
                $key = "AA";
            } elseif ($key == "AZ") {
                $key = "BA";
            } else {
                $key++;
            }
        }
        $column = 2;
        $objActSheet = $objPHPExcel->getActiveSheet();


        foreach ($data as $key => $rows) { // 行写入
            $span = "A";
            foreach ($rows as $keyName => $value) { // 列写入

                $j = $span;
                $objActSheet->setCellValue($j . $column, $value);

                if ($span == "Z") {
                    $span = "AA";
                } elseif ($span == "AZ") {
                    $span = "BA";
                } else {
                    $span++;
                }
            }
            $column++;
        }

        $fileName = iconv("utf-8", "gb2312", $fileName);
        // 重命名表
        // $objPHPExcel->getActiveSheet()->setTitle('test');
        // 设置活动单指数到第一个表,所以Excel打开这是第一个表
        $objPHPExcel->setActiveSheetIndex(0);
        ob_end_clean(); // 清除缓冲区,避免乱码
        header('Content-Type: application/vnd.ms-excel');
        header("Content-Disposition: attachment;filename=" . $fileName);
        header('Cache-Control: max-age=0');

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output'); // 文件通过浏览器下载
        exit();
    }

3.後台模型:

public function actionExport()
{
    $searchModel = new testSearch();  //test是model中對應的表
    $queryParams=Yii::$app->request->queryParams;
    $dataProvider = $searchModel->export($queryParams);
    $model = $dataProvider->getModels();
    $list['rows'] = $model;
    $list['total'] = $dataProvider->totalCount;
    return $list;
}
public function export($params)
{
    $query = Test::find()->select('***,***,***,');  //導出對應的某張表中字段
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
            'pageSize' => false,
        ]
    ]);
    $this->load($params);
    if(!$this->validate())
    {
        return $dataProvider;
    }
    return $dataProvider;
}

© 著作权归作者所有

编译中ing
粉丝 1
博文 80
码字总数 50313
作品 0
西安
程序员
私信 提问
PHP excel导出乱码问题解决办法

在2003及其它版本导出一切正常,但是在excel2007上导出乱码,处理方法: string format for excel to export. Valid value are 'Excel5','Excel2007','Excel2003XML','00Calc','Gnumeric'. ......

风清扬-深圳
2016/01/15
336
0
Yii 2 —— 导入Excel文件

导入Excel文件需要两个扩展:PHPOffice/PHPExcel和moonlandsoft/yii2-phpexcel,这两个扩展中,PHPOffice/PHPExcel是基础的Excel文件接口,moonlandsoft/yii2-phpexcel提供了导入和导出的功能...

tywali
2017/06/21
0
0
yii2框架中整合PHPOffice的PhpSpreadsheet开源库

在所有的php office库(http://www.21doc.net/php/awesomephp#Office),以前用得最多的版本是PHPOffice/PHPExcel(https://github.com/PHPOffice/PHPExcel),不过该库最后更新的版本为2015发...

penngo
2018/10/26
0
0
用yii2实现youtube风格的错误处理页面

最近yii2开发组成员Alexander Makarov写了一篇blog,关于youtube网站报错信息页面的分析。 当我们的程序在生产阶段的时候,不能将程序的信息暴露出来,这会给黑客破解网站的机会。youtube网站...

abei2017
2018/05/21
0
0
yii2 数据导出 excel导出时列超过26列时解决办法

作者:白狼 出处:http://www.manks.top/article/yii2excel_extension 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任...

白狼栈
2015/10/14
417
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql免安装版,服务无法启动没有抱任何错误

1.解压 2.新建my.ini [mysqld]# Remove leading # and set to the amount of RAM for the most important data# cache in MySQL. Start at 70% of total RAM for dedicated server, e......

榴莲黑芝麻糊
33分钟前
0
0
Qt编写安防视频监控系统3-通道交换

一、前言 最开始写通道交换的功能的时候,走了很多弯路,比如最开始用最初级的办法,触发交换的时候,先关闭视频,然后设置新的url重新打开视频,这样处理非常低级而且耗内存还卡还很慢,毕竟...

飞扬青云
34分钟前
0
0
如何远程调试部署在CloudFoundry平台上的nodejs应用

网络上关于如何本地调试nodejs应用的教程已经很多了,工具有Chrome开发者工具,Visual Studio Code,和nodejs周边的一些小工具等等。 在实际情况中,我们可能遇到本地运行良好,但是部署到C...

JerryWang_SAP
55分钟前
5
0
微信扫码访问网站调用默认浏览器打开如何实现?

我们在微信内分享链接或二维码的时候,我们会发现我们的网站是可以在浏览器里正常打开的,但就是不能在微信里打开,提示 “ 已停止访问该网页 ”,无论是聊天框也一样。说是系统检测到您的网...

明尼苏达哈士奇
今天
3
0
一份Java程序员进阶架构师的秘籍,你离架构师还差多远

一、如何定义架构师 Java架构师,首先要是一个Java程序员,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,怎么解决并...

我最喜欢三大框架
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部