天天看点

tp5 (layui )excel导出

<?php
namespace app\admin\controller;
use think\Db;
//导出管理
class Daochu extends Common
{
    //第二种报表
    public function exporttwo(){
        // 引入类库
        $parking_length=$_GET['parking_length'];
        $rank=$_GET['rank'];
        $rank_arr=$this->time_differ($rank);
        // 文件名和文件类型
        $fileName = "导出时长超过x小时的车辆汇总".date("Y-m-d H:i:s");
        $fileType = "xlsx";

        // 模拟获取数据
        //$data = self::getData();
        
        $obj =new \PHPExcel();

        // 以下内容是excel文件的信息描述信息
        $obj->getProperties()->setCreator(''); //设置创建者
        $obj->getProperties()->setLastModifiedBy(''); //设置修改者
        $obj->getProperties()->setTitle(''); //设置标题
        $obj->getProperties()->setSubject(''); //设置主题
        $obj->getProperties()->setDescription(''); //设置描述
        $obj->getProperties()->setKeywords('');//设置关键词
        $obj->getProperties()->setCategory('');//设置类型
        

        $data=Db::table("parking_record")->field("license_go_in,time_go_in,time_go_out,owner,parking_length")->select();
        //echo Db::table("parking_record")->getLastSql();die;
        //print_r($data);die;
        
        // 设置当前sheet
        $obj->setActiveSheetIndex(0);

        // 设置当前sheet的名称
        $obj->getActiveSheet()->setTitle("导出时长超过x小时的车辆汇总");

        // 列标
        $list = ['A', 'B', 'C','D','E','F','G','H','I'];
        
        
        // 填充第一行数据
        $obj->getActiveSheet()
            ->setCellValue($list[0] . '1', '序号') //序号加1
            ->setCellValue($list[1] . '1', '车牌号')
            ->setCellValue($list[2] . '1', '入场时间')
            ->setCellValue($list[3] . '1', '出场时间')
            ->setCellValue($list[4] . '1', '停车时长')
            ->setCellValue($list[5] . '1', '部门') //去基表里面查
            ->setCellValue($list[6] . '1', '车位名称')//去基表里面查
            ->setCellValue($list[7] . '1', '车主姓名')
            ->setCellValue($list[8] . '1', '异常原因');

        // 填充第n(n>=2, n∈N*)行数据
        
        $length = count($data);
        for ($i = 0; $i < $length; $i++) {
            //$obj->getActiveSheet()->setCellValue($list[0] . ($i + 2), '20190101', \PHPExcel_Cell_DataType::TYPE_STRING);//将其设置为文本格式
            $obj->getActiveSheet()->setCellValue($list[0] . ($i + 2), ($i+1), \PHPExcel_Cell_DataType::TYPE_STRING);
            $obj->getActiveSheet()->setCellValue($list[1] . ($i + 2), $data[$i]['license_go_in']);
            $obj->getActiveSheet()->setCellValue($list[2] . ($i + 2), $data[$i]['time_go_in']);
            $obj->getActiveSheet()->setCellValue($list[3] . ($i + 2), $data[$i]['time_go_out']);
           
            $obj->getActiveSheet()->setCellValue($list[4] . ($i + 2), round($data[$i]['parking_length']/3600,2));
            //去基表里面查询
            $one=Db::table("parking_place_detail")->where(['car_number'=>$data[$i]['license_go_in']])->find();
            if(empty($one)){
                $partment="暂无";
                $car_parking="暂无车位名称";
            }else{
                $partment=$one['department_name'];
                $car_parking=$one['parking_group'];
            }
            $obj->getActiveSheet()->setCellValue($list[5] . ($i + 2), $partment);
            $obj->getActiveSheet()->setCellValue($list[6] . ($i + 2), $car_parking);
            $obj->getActiveSheet()->setCellValue($list[7] . ($i + 2), $data[$i]['owner']);
            $obj->getActiveSheet()->setCellValue($list[8] . ($i + 2), '停车时长超过'.$parking_length.'小时');
        }

        // 设置加粗和左对齐
        foreach ($list as $col) {
            // 设置第一行加粗
            $obj->getActiveSheet()->getStyle($col . '1')->getFont()->setBold(true);
            // 设置第1-n行,左对齐
            for ($i = 1; $i <= $length + 1; $i++) {
                $obj->getActiveSheet()->getStyle($col . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            }
        }

        // 设置列宽
        $obj->getActiveSheet()->getColumnDimension('A')->setWidth(10);
        $obj->getActiveSheet()->getColumnDimension('B')->setWidth(20);
        $obj->getActiveSheet()->getColumnDimension('C')->setWidth(20);
        $obj->getActiveSheet()->getColumnDimension('D')->setWidth(20);
        $obj->getActiveSheet()->getColumnDimension('E')->setWidth(20);
        $obj->getActiveSheet()->getColumnDimension('F')->setWidth(20);
        $obj->getActiveSheet()->getColumnDimension('G')->setWidth(20);
        $obj->getActiveSheet()->getColumnDimension('H')->setWidth(15);
        $obj->getActiveSheet()->getColumnDimension('I')->setWidth(15);
        // 导出
        ob_clean();
        if ($fileType == 'xls') {
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="' . $fileName . '.xls');
            header('Cache-Control: max-age=1');
            $objWriter = new \PHPExcel_Writer_Excel5($obj);
            $objWriter->save('php://output');
            exit;
        } elseif ($fileType == 'xlsx') {
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename="' . $fileName . '.xlsx');
            header('Cache-Control: max-age=1');
            $objWriter = \PHPExcel_IOFactory::createWriter($obj, 'Excel2007');
            $objWriter->save('php://output');
            exit;
        }
    }
    
    //时间区间变成两个时间差
    public function time_differ($rank){
        //$rank="2020-05-01 - 2020-05-30";
        $rank_arr=explode(' ',$rank);
        
        $return_arr['start_time']=$rank_arr[0];
        $return_arr['end_time']=$rank_arr[2];
        
        return $return_arr;
    }
    
}
           

继续阅读