使用PhpSpreadsheet將數據導出爲Excel文件

版權聲明:轉載請註明原創地址 https://blog.csdn.net/u013032788/article/details/84957509

源碼請訪問:https://www.erdangjiade.com/js/8619.htmlphp

咱們會看到了一個學生成績列表,如今咱們要作的是:點擊列表下方的「導出Excel表格」按鈕,便可將數據下載並保存爲Excel文件。

點擊按鈕後,請求了export.php,那麼咱們來看export.php文件:
1.設置表頭

首先咱們引入自動加載PhpSpreadsheet庫,而後實例化,設置工做表標題名稱爲:學生成績表,接着設置表頭內容。表頭分爲兩行,第一行是表格的名稱,第二行數表格列名稱。最後咱們將第一行單元格進行合併,並設置表頭內容樣式:字體、對齊方式等。html

  1. require 'vendor/autoload.php';
  2.  
  3. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  4. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  5.  
  6. include('conn.php'); //鏈接數據庫
  7.  
  8. $spreadsheet = new Spreadsheet();
  9. $worksheet = $spreadsheet->getActiveSheet();
  10. //設置工做表標題名稱
  11. $worksheet->setTitle('學生成績表');
  12.  
  13. //表頭
  14. //設置單元格內容
  15. $worksheet->setCellValueByColumnAndRow(1, 1, '學生成績表');
  16. $worksheet->setCellValueByColumnAndRow(1, 2, '姓名');
  17. $worksheet->setCellValueByColumnAndRow(2, 2, '語文');
  18. $worksheet->setCellValueByColumnAndRow(3, 2, '數學');
  19. $worksheet->setCellValueByColumnAndRow(4, 2, '外語');
  20. $worksheet->setCellValueByColumnAndRow(5, 2, '總分');
  21.  
  22. //合併單元格
  23. $worksheet->mergeCells('A1:E1');
  24.  
  25. $styleArray = [
  26.     'font' => [
  27.         'bold' => true
  28.     ],
  29.     'alignment' => [
  30.         'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
  31.     ],
  32. ];
  33. //設置單元格樣式
  34. $worksheet->getStyle('A1')->applyFromArray($styleArray)->getFont()->setSize(28);
  35.  
  36. $worksheet->getStyle('A2:E2')->applyFromArray($styleArray)->getFont()->setSize(14);

複製代碼sql

 

2.讀取數據

咱們鏈接數據庫後,直接讀取學生成績表t_student,而後for循環,設置每一個單元格對應的內容,計算總成績。注意的是表格中的數據是從第3行開始,由於第1,2行是表頭佔用了。

而後,咱們設置整個表格樣式,給表格加上邊框,而且居中對齊。數據庫

  1. $sql = "SELECT id,name,chinese,maths,english FROM `t_student`";
  2. $stmt = $db->query($sql);
  3. $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
  4. $len = count($rows);
  5. $j = 0;
  6. for ($i=0; $i < $len; $i++) { 
  7.     $j = $i + 3; //從表格第3行開始
  8.     $worksheet->setCellValueByColumnAndRow(1, $j, $rows[$i]['name']);
  9.     $worksheet->setCellValueByColumnAndRow(2, $j, $rows[$i]['chinese']);
  10.     $worksheet->setCellValueByColumnAndRow(3, $j, $rows[$i]['maths']);
  11.     $worksheet->setCellValueByColumnAndRow(4, $j, $rows[$i]['english']);
  12.     $worksheet->setCellValueByColumnAndRow(5, $j, $rows[$i]['chinese'] + $rows[$i]['maths'] + $rows[$i]['english']);
  13. }
  14.  
  15. $styleArrayBody = [
  16.     'borders' => [
  17.         'allBorders' => [
  18.             'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
  19.             'color' => ['argb' => '666666'],
  20.         ],
  21.     ],
  22.     'alignment' => [
  23.         'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
  24.     ],
  25. ];
  26. $total_rows = $len + 2;
  27. //添加全部邊框/居中
  28. $worksheet->getStyle('A1:E'.$total_rows)->applyFromArray($styleArrayBody);

複製代碼瀏覽器

 

若是僅是爲了知足文章開頭說的老闆的需求,咱們這個時候就能夠將數據保存爲Excel文件,固然這個Excel文件只保存在服務器上,而後再使用郵件等方式將Excel發送給老闆就結了。

可是咱們更多的應用場景是用戶直接將數據下載導出爲Excel表格文件,請接着看:
3.下載保存

最後,咱們強制瀏覽器下載數據並保存爲Excel文件。服務器

  1. $filename = '成績表.xlsx';
  2. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  3. header('Content-Disposition: attachment;filename="'.$filename.'"');
  4. header('Cache-Control: max-age=0');
  5.  
  6. $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
  7. $writer->save('php://output');
  8.  
  9. 若是你想要保存爲.xls文件格式的話,能夠改下header代碼:
  10.  
  11. $filename = '成績表.xlsx';
  12. header('Content-Type: application/vnd.ms-excel');
  13. header('Content-Disposition: attachment;filename="'.$filename.'"');
  14. header('Cache-Control: max-age=0');
  15.  
  16. $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'xls');
  17. $writer->save('php://output');

複製代碼app

 

完整的代碼請下載源碼及數據庫。
更多THinkPHP源碼請訪問:http://t.cn/RmZekiV字體

相關文章
相關標籤/搜索