版權聲明:轉載請註明原創地址 https://blog.csdn.net/u013032788/article/details/84957509
源碼請訪問:https://www.erdangjiade.com/js/8619.htmlphp
咱們會看到了一個學生成績列表,如今咱們要作的是:點擊列表下方的「導出Excel表格」按鈕,便可將數據下載並保存爲Excel文件。
點擊按鈕後,請求了export.php,那麼咱們來看export.php文件:
1.設置表頭
首先咱們引入自動加載PhpSpreadsheet庫,而後實例化,設置工做表標題名稱爲:學生成績表,接着設置表頭內容。表頭分爲兩行,第一行是表格的名稱,第二行數表格列名稱。最後咱們將第一行單元格進行合併,並設置表頭內容樣式:字體、對齊方式等。html
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
include('conn.php'); //鏈接數據庫
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
//設置工做表標題名稱
$worksheet->setTitle('學生成績表');
//表頭
//設置單元格內容
$worksheet->setCellValueByColumnAndRow(1, 1, '學生成績表');
$worksheet->setCellValueByColumnAndRow(1, 2, '姓名');
$worksheet->setCellValueByColumnAndRow(2, 2, '語文');
$worksheet->setCellValueByColumnAndRow(3, 2, '數學');
$worksheet->setCellValueByColumnAndRow(4, 2, '外語');
$worksheet->setCellValueByColumnAndRow(5, 2, '總分');
//合併單元格
$worksheet->mergeCells('A1:E1');
$styleArray = [
'font' => [
'bold' => true
],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
],
];
//設置單元格樣式
$worksheet->getStyle('A1')->applyFromArray($styleArray)->getFont()->setSize(28);
$worksheet->getStyle('A2:E2')->applyFromArray($styleArray)->getFont()->setSize(14);
複製代碼
sql
2.讀取數據
咱們鏈接數據庫後,直接讀取學生成績表t_student,而後for循環,設置每一個單元格對應的內容,計算總成績。注意的是表格中的數據是從第3行開始,由於第1,2行是表頭佔用了。
而後,咱們設置整個表格樣式,給表格加上邊框,而且居中對齊。數據庫
$sql = "SELECT id,name,chinese,maths,english FROM `t_student`";
$stmt = $db->query($sql);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$len = count($rows);
$j = 0;
for ($i=0; $i < $len; $i++) {
$j = $i + 3; //從表格第3行開始
$worksheet->setCellValueByColumnAndRow(1, $j, $rows[$i]['name']);
$worksheet->setCellValueByColumnAndRow(2, $j, $rows[$i]['chinese']);
$worksheet->setCellValueByColumnAndRow(3, $j, $rows[$i]['maths']);
$worksheet->setCellValueByColumnAndRow(4, $j, $rows[$i]['english']);
$worksheet->setCellValueByColumnAndRow(5, $j, $rows[$i]['chinese'] + $rows[$i]['maths'] + $rows[$i]['english']);
}
$styleArrayBody = [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '666666'],
],
],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
],
];
$total_rows = $len + 2;
//添加全部邊框/居中
$worksheet->getStyle('A1:E'.$total_rows)->applyFromArray($styleArrayBody);
複製代碼
瀏覽器
若是僅是爲了知足文章開頭說的老闆的需求,咱們這個時候就能夠將數據保存爲Excel文件,固然這個Excel文件只保存在服務器上,而後再使用郵件等方式將Excel發送給老闆就結了。
可是咱們更多的應用場景是用戶直接將數據下載導出爲Excel表格文件,請接着看:
3.下載保存
最後,咱們強制瀏覽器下載數據並保存爲Excel文件。服務器
$filename = '成績表.xlsx';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
若是你想要保存爲.xls文件格式的話,能夠改下header代碼:
$filename = '成績表.xlsx';
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'xls');
$writer->save('php://output');
複製代碼
app
完整的代碼請下載源碼及數據庫。
更多THinkPHP源碼請訪問:http://t.cn/RmZekiV字體