thinkphp5.1 使用phpoffice/phpspreadsheet導出excel

PHPExcel已經被廢棄在PHP7.2中已經無法獲取更新,官方重新開了一個新包phpspreadsheet

composer安裝:電腦/服務器上安

composer require phpoffice/phpspreadsheet

  以下爲後臺PHP代碼

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use think\facade\Cache;
 $xlsName = "文件" . date("YmdHis", time());
        $head = ['日期', '付款人數', '付款訂單數', '付款金額', '付款件數'];// 表頭信息
        $keys = ['time', 'order_num', 'did', 'total_price', 'good_num'];
        $this->downloadExcel($xlsName, $list['data'], $head, $keys);// 傳遞參數
//報表導出核心方法
    //* 導出excel表
    //* $data:要導出excel表的數據,接受一個二維數組
    //* $name:excel表的表名
    //* $head:excel表的表頭,接受一個一維數組
    //* $key:$data中對應表頭的鍵的數組,接受一個一維數組
    //* 備註:此函數缺點是,表頭(對應列數)不能超過26;
    //*循環不夠靈活,一個單元格中不方便存放兩個數據庫字段的值

    public function downloadExcel($name = '測試表', $data = [], $head = [], $keys = [])
    {
        $count = count($head);  //計算表頭數量
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        for ($i = 65; $i < $count + 65; $i++) {     //數字轉字母從65開始,循環設置表頭:
            $sheet->setCellValue(strtoupper(chr($i)) . '1', $head[$i - 65]);
        }
        foreach ($data as $key => $item) {             //循環設置單元格:
            //$key+2,因爲第一行是表頭,所以寫到表格時   從第二行開始寫
            for ($i = 65; $i < $count + 65; $i++) {     //數字轉字母從65開始:
                $sheet->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys[$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);
        return;
    }

 

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