天天看點

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;
    }
    
}
           

繼續閱讀