美文网首页
Thinkphp 导出Excel表格

Thinkphp 导出Excel表格

作者: 风度翩翩的程序猿 | 来源:发表于2020-07-17 14:37 被阅读0次

php代码

 $saishi_id = I('post.saishi_id');
        $map['status'] = 1;
        $map['saishi_id'] = $saishi_id;
        $model = D('PeopleView');
        // 通过赛事id 来查赛事名称
        $saishi = M('saishi')->where(array('saishi_id'=>$saishi_id))->find();
        $list = $model->where($map)->order('id DESC')->select(); // 数据
        foreach ($list as $key=>$val){
            $list[$key]['add_time'] = date( "Y-m-d H:i:s",$val['add_time']);
        }
        // 引入phpexcel核心文件,不是tp,你也可以用include(‘文件路径’)来引入
        import("Org.Util.PHPExcel");
        import("Org.Util.PHPExcel.Reader.Excel5");
        $excel = new \PHPExcel();
        $savefile = $saishi['saishi_title'].'('.$saishi['group'].')'; // Excel文件名

        // 设置excel属性
        $objActSheet = $excel->getActiveSheet();
        // 根据有生成的excel多少列,$letter长度要大于等于这个值
        $letter = array('A', 'B', 'C', 'D', 'E', 'F','G');

        $datafield = array('name', 'idcard', 'mobile', 'qiudui_name', 'saishi_title','groups','add_time');
        $fileheader = array('姓名', '身份证号', '电话', '所属球队', '所属赛事','赛事组别','报名时间');
        // 设置当前的sheet
        $excel->setActiveSheetIndex(0);

        // 设置sheet的name
        $objActSheet->setTitle($saishi['saishi_title'].'('.$saishi['group'].')'.'球员表格');

        // 设置表头
        for ($i = 0; $i < count($fileheader); $i++) {
            // 单元宽度自适应,1.8.1版本phpexcel中文支持勉强可以,自适应后单独设置宽度无效
            //$objActSheet->getColumnDimension("$letter[$i]")->setAutoSize(true);
            // 设置表头值,这里的setCellValue第二个参数不能使用iconv,否则excel中显示false
            $objActSheet->setCellValue("$letter[$i]1", $fileheader[$i]);
            // 设置表头字体样式
            $objActSheet->getStyle("$letter[$i]1")->getFont()->setName('微软雅黑');
            // 设置表头字体大小
            $objActSheet->getStyle("$letter[$i]1")->getFont()->setSize(12);
            // 设置表头字体是否加粗
            $objActSheet->getStyle("$letter[$i]1")->getFont()->setBold(true);
            // 设置表头文字垂直居中
            $objActSheet->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            // 设置文字上下居中
            $objActSheet->getStyle($letter[$i])->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
            // 设置表头外的文字垂直居中
            $excel->setActiveSheetIndex(0)->getStyle($letter[$i])->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            // 设置列宽
            $objActSheet->getColumnDimension($letter[$i])->setWidth('30px');
        }

        // 这里$i初始值设置为2,$j初始值设置为0,自己体会原因
        foreach ($list as $row => $data) {
            $i = $row + 2;
            foreach ($datafield as $key => $value) {
                $data_v = $data[$value];

                if ($value == 'create_time') {
                    $data_v = $data_v ? date('Y-m-d H:i:s', $data_v) : '无';//判断$data_v有值转换无值显示无
                }
                if ($value == 'status') {
                    $data_v = $this->withdrawals_status[$data_v];//状态显示
                }
            // 不是图片时将数据加入到excel,这里数据库存的图片字段是img
                $objActSheet->setCellValue("$letter[$key]$i", $data_v);
            // 设置单元格高度,暂时没有找到统一设置高度方法
            //$objActSheet->getColumnDimension($letter[$key])->setWidth('80px');
            }
        }
        ob_end_clean(); //清除缓冲区,避免乱码
        header('Content-Type: application/vnd.ms-excel');
        // 下载的excel文件名称,为Excel5,后缀为xls,不过影响似乎不大
        header('Content-Disposition: attachment;filename="' . $savefile . '.xls"');
        header('Cache-Control: max-age=0');
        // 用户下载excel
        $objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel5');
        $objWriter->save('php://output');

相关文章

网友评论

      本文标题:Thinkphp 导出Excel表格

      本文链接:https://www.haomeiwen.com/subject/rvughktx.html