2023年1月7日:fastadmin导出数据为excel格式

需求图:

2023年1月7日:fastadmin导出数据为excel格式_第1张图片

 实现方法:

第一种方法:fastadmin自带导出数据,直接点击下载即可

2023年1月7日:fastadmin导出数据为excel格式_第2张图片 效果图

 第二种方法:自定义导出按钮,需要编写方法

效果图:

2023年1月7日:fastadmin导出数据为excel格式_第3张图片 效果图

 代码实现

首先:前端按钮代码(可直接拿来用即可)

 {:__('Export')}

其次:js点击事件代码(可直接拿来用即可[代码位置var table = $("#table");后即可])

$(document).on("click", ".btn-export", function () {
                var ids = Table.api.selectedids(table);
                var page = table.bootstrapTable('getData');
                var all = table.bootstrapTable('getOptions').totalRows;
                console.log(ids, page, all);
                Layer.confirm("请选择导出的选项
", { title: '导出数据', btn: ["选中项(" + ids.length + "条)", "本页(" + page.length + "条)", "全部(" + all + "条)"], success: function (layero, index) { $(".layui-layer-btn a", layero).addClass("layui-layer-btn0"); } , yes: function (index, layero) { submitForm(ids.join(","), layero); return false; } , btn2: function (index, layero) { var ids = []; $.each(page, function (i, j) { ids.push(j.id); }); submitForm(ids.join(","), layero); return false; } , btn3: function (index, layero) { submitForm("all", layero); return false; } }) }); var submitForm = function (ids, layero) { var options = table.bootstrapTable('getOptions'); console.log(options); var columns = []; $.each(options.columns[0], function (i, j) { if (j.field && !j.checkbox && j.visible && j.field != 'operate') { columns.push(j.field); } }); var search = options.queryParams({}); $("input[name=search]", layero).val(options.searchText); $("input[name=ids]", layero).val(ids); $("input[name=filter]", layero).val(search.filter); $("input[name=op]", layero).val(search.op); $("input[name=columns]", layero).val(columns.join(',')); $("form", layero).submit(); };

最后:控制器中代码(需要修改)

//导出数据
    public function export(){
        if ($this->request->isPost()){
            set_time_limit(0);//设置时间限制
            $ids = $this->request->post('ids'); //获取数据的所有id
            $excel = new \PHPExcel();   // 生成新的excel对象
            $excel->getProperties()
                ->setCreator("FastAdmin")           //设置作者
                ->setLastModifiedBy("FastAdmin")    //设置上次修改者
                ->setTitle("考勤打卡表")                   //设置表格标题
                ->setSubject("Subject");            //设置主题
            $excel->getDefaultStyle()->getFont()->setName('楷体');    //设置默认字体
            $excel->getDefaultStyle()->getFont()->setSize(15);        //设置默认字体大小
            /**
             * $excel->getActiveSheet()->getColumnDimension('A')->setWidth(15);//设置列宽
             * $excel->getActiveSheet()->getRowDimension('6')->setRowHeight(30);//设置行高
             * $excel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);单元格宽度自适应
             * $excel->getActiveSheet()->mergeCells('A1:P1');   合并单元格
             */
            $excel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
            $excel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
            $excel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
            $excel->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
            $excel->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
            $excel->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
            $excel->getActiveSheet()->getColumnDimension('G')->setWidth(15);
            // 开始操作excel表
            $worksheet = $excel->setActiveSheetIndex(0)    //操作第一个工作表
            ->setCellValue('A1','劳务公司名称')   //设置表格标题名称
            ->setCellValue('B1','客户现场名称')
            ->setCellValue('C1','姓名')
            ->setCellValue('D1','身份证号')
            ->setCellValue('E1','上班时间')
            ->setCellValue('F1','下班时间')
            ->setCellValue('G1','是否为跨天打卡');
            if ($ids=='all' || empty($ids)){    //判断当前数据为全部或者选中的
                $list = $this->model->with(['user','client','labor'])->select();
            }else{
                $list = $this->model->with(['user','client','labor'])->select($ids);
            }

            foreach ($list as $k => $val){
                $k = $k + 2;//表格是从2开始的
                $worksheet->setCellValue('A'.$k,$val['labor']['labname'])
                    ->setCellValue('B'.$k,$val['client']['sitename'])
                    ->setCellValue('C'.$k,$val['user']['username'])
                    ->setCellValue('D'.$k,$val['user']['idcard'])
                    ->setCellValue('E'.$k,$val['starttime_text'])
                    ->setCellValue('F'.$k,$val['endtime_text'])
                    ->setCellValue('G'.$k,$val['iskt_text']);
            }

            $excel->createSheet();  //创建excel表
            $title = "考勤打卡数据_".date("Y-m-dHis");    //考勤打卡数据_2023-01-07145656.xlsx
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//表明当前文件是.xlsx
            header('Content-Disposition: attachment;filename="'.$title.'.xlsx"');//文件名称[考勤打卡数据_2023-01-07145656.xlsx]
            header('Cache-Control: max-age=0'); //禁用缓存
            header('Cache-Control: max-age=1'); //通知浏览器:1 秒之内不要烦我,自己从缓冲区中刷新。
            header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // 缓存过期时间(禁用缓存)
            header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // 上一次修改时间
            header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 缓存控制:必须重新验证
            header('Pragma: public'); // 可被任何缓存所缓存 http1.0协议
            $objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
            $objWriter->save('php://output');       //保存地址
            exit;
            return;
        }
    }

Excel效果图

 相关知识解析

1、PHP常用header头部定义

2、HTTP协议

HTTP1.0中通过Pragma 控制页面缓存,通常设置的值为no- cache,不过这个值不这么保险,通常还加上Expires置为0来达到目的。但是如我们刻意需要浏览器或缓存服务器缓存住我们的页面这个值则要设置为 Pragma。
HTTP1.1中启用Cache-Control 来控制页面的缓存与否,这里介绍几个常用的参数:

  • no-cache,浏览器和缓存服务器都不应该缓存页面信息;
  • public,浏览器和缓存服务器都可以缓存页面信息;
  • no-store,请求和响应的信息都不应该被存储在对方的磁盘系统中;
  • must-revalidate,对于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时

最后(相关内容节选以及内容详细推荐地址)

  1. phpExcel中文帮助手册之常用功能指南(phpExcel中文帮助手册之常用功能指南 - phpStudy)
  2. PHPExcel常用属性使用(PHPExcel常用属性使用 - 走看看)
  3. header头部定义(PHP 常用的header头部定义汇总_tboqi1的博客-CSDN博客)

你可能感兴趣的:(前端,php,javascript)