php CI框架Excel导出xlsx表

1.最近在工作中用到这个导出

2.

//前端页面定义按钮指到控制器的导入方法  
public function export(){
        $fileName = "重点交通违法行为数据统计报表.xlsx";
        $fileNames = iconv('UTF-8', 'GBK', $fileName);
        include ROOT_PATHS . 'classes/PHPExcel.php';
        include ROOT_PATHS . 'classes/PHPExcel/Writer/Excel2007.php';
        $objPHPExcel = new PHPExcel();
        //设置excel的属性:
        //创建人
        $objPHPExcel->getProperties()->setCreator("admin");
        //最后修改人
        $objPHPExcel->getProperties()->setLastModifiedBy("admin");
        //标题
        $objPHPExcel->getProperties()->setTitle("重点交通行为数据统计表");
        //题目
        $objPHPExcel->getProperties()->setSubject("重点交通行为数据统计报表");
        //描述
        $objPHPExcel->getProperties()->setDescription("重点交通违法行为数据统计报表");
        //关键字
        $objPHPExcel->getProperties()->setKeywords("重点交通违法行为数据统计报表");
        //种类
        $objPHPExcel->getProperties()->setCategory("重点交通违法行为数据统计报表");
        //设置当前的sheet
        $objPHPExcel->setActiveSheetIndex(0);
        //设置sheet的name
        $objPHPExcel->getActiveSheet()->setTitle('重点交通违法行为数据统计报表');
        //所有表格居中
        $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getRowDimension("1")->setRowHeight(25);
        $objPHPExcel->getActiveSheet()->getRowDimension("2")->setRowHeight(25);
        $objPHPExcel->getActiveSheet()->mergeCells('A1:A2');
        $objPHPExcel->getActiveSheet()->setCellValue('A1', "处罚部门");
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(35);
        //查询当前违法行为代码
        $dm = $this -> m_keytraffic_statistics->select_all_keytraffic();
        $zm = $this -> IntToChr(count($dm));
        $objPHPExcel->getActiveSheet()->mergeCells('B1:'.$zm.'1');
        $objPHPExcel->getActiveSheet()->setCellValue('B1', '2018年重点交通违法数据统计');
        for($k = 1;$k <=count($dm);$k++){
            $zm1 = $this -> IntToChr($k);
            $objPHPExcel->getActiveSheet()->getColumnDimension($zm1)->setWidth(20);
        }
        for($i=1;$i<=count($dm);$i++){
            $zm1 = $this -> IntToChr($i);
            $objPHPExcel->getActiveSheet()->setCellValue($zm1.'2', $dm[$i-1]['WFMS']);
        }
        $objPHPExcel->getActiveSheet()->getStyle( 'A1:'.$zm.'2')->applyFromArray(
            array(
                'font'    => array (
                    'bold'      => true
                ),
                'borders' => array(
                    'allborders' => array( //设置全部边框
                        'style' => \PHPExcel_Style_Border::BORDER_THIN
                    ),
                ),
            )
        );
        $objPHPExcel->getActiveSheet()->getStyle( 'A1:'.$zm.'32')->applyFromArray(
            array(
                'borders' => array(
                    'allborders' => array( //设置全部边框
                        'style' => \PHPExcel_Style_Border::BORDER_THIN
                    ),
                ),
            )
        );
        $start_time = $this -> input -> get('start_time',TRUE);
        $end_time = $this -> input -> get('end_time',TRUE);
        $result_data = $this -> data_statistics1($start_time,$end_time);
        $objPHPExcel->getActiveSheet()->setCellValue('A3', "合计");
        for($k = 1;$k <=count($dm);$k++){
            $zm1 = $this -> IntToChr($k);
            $objPHPExcel->getActiveSheet()->setCellValue($zm1.'3', $result_data['zs'][$k-1]);
        }
        for($l = 1; $l <= count($result_data['orgname']);$l++){
            $num = $l + 3;
            $objPHPExcel->getActiveSheet()->setCellValue('A'.$num, $result_data['orgname'][$l-1]);
        }
        for($a = 1;$a<=count($dm);$a++){
            $zm1 = $this -> IntToChr($a);
            for($b = 1;$b <=count($result_data['data'][$a-1]);$b++){
                $num1 = $b + 3;
                $objPHPExcel->getActiveSheet()->setCellValue($zm1.$num1, $result_data['data'][$a-1][$b-1]);
            }
        }
        $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
        //或者$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 非2007格式
        $objWriter->save(ROOT_PATHS."assets/uploads/excel/".$fileNames);
        //下载
        $excelPath = ROOT_PATHS.'assets/uploads/excel/'.$fileNames;
        header( "Content-Disposition:  attachment;  filename=".$fileNames); //告诉浏览器通过附件形式来处理文件
        header('Content-Length: ' . filesize($excelPath)); //下载文件大小
        readfile($excelPath);  //读取文件内容
    }
    //将数字转化为字母 零就是A  以此类推
    public function IntToChr($index, $start = 65) {
        $str = '';
        if (floor($index / 26) > 0) {
            $str .= IntToChr(floor($index / 26)-1);
        }
        return $str . chr($index % 26 + $start);
    }
    public function data_statistics1($start_time,$end_time)
    {
        $data = $this -> m_keytraffic_statistics->select_all_orgname();  //部门名称和部门代码
        $wfxw = $this -> m_keytraffic_statistics->select_all_keytraffic1();

        foreach ($wfxw as $k1 => $v1){
            $a[] = explode(',',$v1['WFXW']);
        }

        foreach ($data as $k => $v){
            $orgname[] = $v['orgname'];

            $res2 = substr($v['orgnum'],0,8);
            foreach ($a as $k2 => $v2){
                if(count($v2) == 1){
                    $num2 = $this -> db -> like('orgnum',$res2,'after') -> where('wfxw1',$v2['0']) -> where("wfsj between '$start_time 'and '$end_time'") -> where('sendstatus',1) -> where('issend',1) -> get('forceinfo') -> num_rows();
                    $num3 = $this -> db -> like('orgnum',$res2,'after') -> where('wfxw',$v2['0']) -> where("wfsj between '$start_time 'and '$end_time'") -> where('sendstatus',1) -> get('surveilinfo') -> num_rows();
                    $num4 = $this -> db -> like('orgnum',$res2,'after') -> where('wfxw',$v2['0']) -> where("wfsj between '$start_time 'and '$end_time'") -> where('sendstatus',1) -> where('issend',1) -> get('simpleinfo') -> num_rows();
                    $num6[$k2][] = $num2 + $num3 + $num4;
                }else{
                    $num5 = $this -> db -> like('orgnum',$res2,'after') -> where_in('wfxw1',$v2) -> where("wfsj between '$start_time 'and '$end_time'") -> where('sendstatus',1) -> where('issend',1) ->get('forceinfo') -> num_rows();
                    $num7 = $this -> db -> like('orgnum',$res2,'after') -> where_in('wfxw',$v2) -> where("wfsj between '$start_time 'and '$end_time'") -> where('sendstatus',1) -> get('surveilinfo') -> num_rows();
                    $num8 = $this -> db -> like('orgnum',$res2,'after') -> where_in('wfxw',$v2) -> where("wfsj between '$start_time 'and '$end_time'") ->  where('sendstatus',1) -> where('issend',1) ->get('simpleinfo') -> num_rows();
                    $num6[$k2][] = $num5 + $num7 + $num8;
                }
            }
        }
        foreach ($num6 as $k3 => $v3){
            $date['zs'][] = array_sum($v3);
        }
        $date['data'] = $num6;
        $date['orgname'] = $orgname;
        return $date;
    }

猜你喜欢

转载自blog.csdn.net/qq_39870660/article/details/85259161
今日推荐