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