phpspreadsheet 導出多個工作表


phpspreadsheet 導出多個工作表
因為有多組數據導出,所以要新建多張工作表
實現效果
主要創建方式有兩種
//方式1 $spreadsheet->createSheet();
 
//方式2 Create a new worksheet called "My Data"
$myWorkSheet = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, 'My Data');//與下面的配合使用
$spreadsheet->addSheet($myWorkSheet, 0);//將“My Data”工作表作為電子表格對象中的第一個工作表附加
代碼如下
 
 
 
優化后的代碼
public function export(){
        $name='每日統計'.date("Y-m-d H-i-s",time());
        // $data=[['aa','aa','cc','dd','ee'],['bb','bb','cc','dd','ee']];
        // ?工地考勤
        $data['kaoqin'] = Db::name('pt_gd_gdrz rz')
                        ->field("DATE_FORMAT(FROM_UNIXTIME(ctime),'%Y-%m-%d') as date,u.name,rz.title,rz.content")
                        ->where(['p.appid'=>session('pt_res.appid')])
                        ->join('zf_pt_post p','p.id=rz.gd_id')
                        ->join('zf_user u','rz.openid = u.openid')
                        ->whereTime('ctime', 'today')
                        ->select();
        
        ////工地打卡
        $data['daka'] = Db::name('pt_gd_gddk rz')
                        ->field("DATE_FORMAT(FROM_UNIXTIME(ctime),'%Y-%m-%d') as date,u.name,p.title")
                        ->where(['p.appid'=>session('pt_res.appid')])
                        ->join('zf_pt_post p','p.id=rz.gd_id')
                        ->join('zf_user u','rz.openid = u.openid')
                        ->whereTime('ctime', 'today')
                        ->select(); 
        // 新用戶
        $data['yonghu'] = Db::name('user')->where(['appid'=>session('pt_res.appid')])->field("DATE_FORMAT(FROM_UNIXTIME(create_time),'%Y-%m-%d %H:%i:%s') as date,name")
                        ->whereTime('create_time', 'today')
                        ->select();
        // 預約
        $data['yuyue'] = Db::name('yuyue y')
                        ->field("DATE_FORMAT(FROM_UNIXTIME(ctime),'%Y-%m-%d') as date,u.name,y.phone")
                        ->where(['u.appid'=>session('pt_res.appid')])
                        ->whereTime('ctime', 'today')
                        ->join('zf_user u','u.id=y.uid')
                        ->select();
        //設置表頭:
        $head['kaoqin'] = ['時間','姓名','標題', '內容']; 
        //數據中對應的字段,用於讀取相應數據:
        $keys['kaoqin'] = ['date','name','title','content'];     
        $count['kaoqin'] = count($head['kaoqin']);  //計算表頭數量
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet()->setTitle('工地考勤');
        for ($i = 65; $i < $count['kaoqin'] + 65; $i++) {     //數字轉字母從65開始,循環設置表頭:
            $sheet->setCellValue(strtoupper(chr($i)) . '1', $head['kaoqin'][$i - 65]);
        }
        /*--------------開始從數據庫提取信息插入Excel表中------------------*/
        foreach ($data['kaoqin'] as $key => $item) {             //循環設置單元格:
            //$key+2,因為第一行是表頭,所以寫到表格時   從第二行開始寫 
            for ($i = 65; $i < $count['kaoqin'] + 65; $i++) {     //數字轉字母從65開始:
                $sheet->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys['kaoqin'][$i - 65]]);
                $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20); //固定列寬
            }
        }
       //工地打卡
        //方式2 Create a new worksheet called "My Data"
        $myWorkSheet['daka'] = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, '工地打卡');//與下面的配合使用
        $spreadsheet->addSheet($myWorkSheet['daka'], 0);//將“My Data”工作表作為電子表格對象中的第一個工作表附加
        $head['daka'] = ['時間','姓名','標題']; 
        //數據中對應的字段,用於讀取相應數據:
        $keys['daka'] = ['date','name','title'];     
        $count['daka'] = count($head['daka']);  //計算表頭數量
        for ($i = 65; $i < $count['daka'] + 65; $i++) {     //數字轉字母從65開始,循環設置表頭:
            $myWorkSheet['daka']->setCellValue(strtoupper(chr($i)) . '1', $head['daka'][$i - 65]);
        }
        /*--------------開始從數據庫提取信息插入Excel表中------------------*/
        foreach ($data['daka'] as $key => $item) {             //循環設置單元格:
            //$key+2,因為第一行是表頭,所以寫到表格時   從第二行開始寫 
            for ($i = 65; $i < $count['daka'] + 65; $i++) {     //數字轉字母從65開始:
                $myWorkSheet['daka']->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys['daka'][$i - 65]]);
                $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20); //固定列寬
            }
        }
        // 新用戶
         //方式2 Create a new worksheet called "My Data"
        $myWorkSheet['yonghu'] = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, '新用戶');//與下面的配合使用
        $spreadsheet->addSheet($myWorkSheet['yonghu'], 0);//將“My Data”工作表作為電子表格對象中的第一個工作表附加
        $head['yonghu'] = ['時間','姓名']; 
        //數據中對應的字段,用於讀取相應數據:
        $keys['yonghu'] = ['date','name'];     
        $count['yonghu'] = count($head['yonghu']);  //計算表頭數量
        for ($i = 65; $i < $count['yonghu'] + 65; $i++) {     //數字轉字母從65開始,循環設置表頭:
            $myWorkSheet['yonghu']->setCellValue(strtoupper(chr($i)) . '1', $head['yonghu'][$i - 65]);
        }
        /*--------------開始從數據庫提取信息插入Excel表中------------------*/
        foreach ($data['yonghu'] as $key => $item) {             //循環設置單元格:
            //$key+2,因為第一行是表頭,所以寫到表格時   從第二行開始寫 
            for ($i = 65; $i < $count['yonghu'] + 65; $i++) {     //數字轉字母從65開始:
                $myWorkSheet['yonghu']->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys['yonghu'][$i - 65]]);
                $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20); //固定列寬
            }
        }
        // 預約
         //方式2 Create a new worksheet called "My Data"
        $myWorkSheet['yuyue'] = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, '預約');//與下面的配合使用
        $spreadsheet->addSheet($myWorkSheet['yuyue'], 0);//將“My Data”工作表作為電子表格對象中的第一個工作表附加
        $head['yuyue'] = ['時間','姓名','電話']; 
        //數據中對應的字段,用於讀取相應數據:
        $keys['yuyue'] = ['date','name','phone'];     
        $count['yuyue'] = count($head['yuyue']);  //計算表頭數量
        for ($i = 65; $i < $count['yuyue'] + 65; $i++) {     //數字轉字母從65開始,循環設置表頭:
            $myWorkSheet['yuyue']->setCellValue(strtoupper(chr($i)) . '1', $head['yuyue'][$i - 65]);
        }
        /*--------------開始從數據庫提取信息插入Excel表中------------------*/
        foreach ($data['yuyue'] as $key => $item) {             //循環設置單元格:
            //$key+2,因為第一行是表頭,所以寫到表格時   從第二行開始寫 
            for ($i = 65; $i < $count['yuyue'] + 65; $i++) {     //數字轉字母從65開始:
                $myWorkSheet['yuyue']->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys['yuyue'][$i - 65]]);
                $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20); //固定列寬
            }
        }

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $name . '.xlsx"');
        header('Cache-Control: max-age=0');
        $writer = new Xlsx($spreadsheet);
        $writer->save('php://output');
        //刪除清空:
        $spreadsheet->disconnectWorksheets();
        unset($spreadsheet);
        exit;
    }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM