phpspreadsheet 導出 excel 表

調用:

 //設置表頭:
 $excel_title = ['前綴', '前6位', '省份', '城市', '運營商', 'post_code', 'city_code', 'area_code'];
 //數據中對應的字段,用於讀取相應數據:
 $excel_filed = ['prefix', 'phone', 'province', 'city', 'isp', 'post_code', 'city_code', 'area_code'];
 $this->OfficeExport('訂單表', $phoneinfo_sel_obj, $excel_title, $excel_filed);

導出方法:

/**
     * [OfficeExport  phpspreadsheet 導出excel表]
     * @Author           猴子年華、
     * @CreateTime       2019-03-15
     * @LatestUpdateTime 2019-03-15
     * @remark           [remark]
     * @copyright        [copyright]
     * @license          [license]
     * @version          [version]
     * @param            string      $excel_name  [ excel表的表名 ]
     * @param            array       $excel_data  [ 要導出excel表的數據,接受一個二維數組 ]
     * @param            array       $excel_title [ excel表的表頭,接受一個一維數組 ]
     * @param            array       $excel_filed [ $data中字段名,接受一個一維數組 ]
     */
    public function OfficeExport($excel_name='測試表', $excel_data=[], $excel_title=[], $excel_filed=[])
    {
        try {
            $count       = count($excel_title);  //計算表頭數量 
            $spreadsheet = new Spreadsheet();
            $sheet       = $spreadsheet->getActiveSheet();
            ob_clean();    //解決文件損壞
            $cellName = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'];

            /*---設置Excel title-------開始-----------*/
            $spreadsheet->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.'  導出時間:'.date('Y-m-d H:i:s'));
            foreach ($excel_title as $excel_title_key_one => $excel_title_val_one) {
                $sheet->setCellValue($cellName[$excel_title_key_one] . '1', $excel_title_val_one);
                $sheet->getColumnDimension($cellName[$excel_title_key_one])->setWidth(20); //固定列寬,表格寬度
            }
            /*---設置Excel title-------結束-----------*/

            /*---開始從數據庫提取信息插入Excel表中-------開始-----------*/
            foreach ($data as $key => $item) {
                foreach ($excel_title as $excel_title_key_two => $excel_title_val_two) {  // 這裏循環 excel_title 導出前,就不用再組裝數據了
                    $sheet->setCellValue($cellName[$key] . ($key + 2), $item[$excel_filed[$excel_title_key]]); // 行寫入,從第二行開始寫
                    $sheet->getColumnDimension($cellName[$key])->setWidth(20); //固定列寬,表格寬度
                }
            }
            /*---開始從數據庫提取信息插入Excel表中-------結束-----------*/

            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="' . $excel_name . '.xlsx"');
            header('Cache-Control: max-age=0'); // 禁止緩存
            header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
            $writer = new Xlsx($spreadsheet);
            $writer->save('php://output');
            //刪除清空:釋放內存
            $spreadsheet->disconnectWorksheets();
            unset($spreadsheet);
            exit;
        } catch (Exception $e) {
            return false;
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章