1、composer安裝:
composer require phpoffice/phpspreadsheet
2.點擊導出按鈕,觸發控制器里面的方法 wdjzdc()
3. 在控制中引入
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
//wdjzdc數據導出 public function wdjzdc() { $spreadsheet = new Spreadsheet(); $worksheet = $spreadsheet->getActiveSheet(); //設置工作表標題名稱 $worksheet->setTitle('wdjz客戶表'); //表頭 //設置單元格內容 $worksheet->setCellValueByColumnAndRow(1, 1, 'wdjz無毒樣板客戶表'); $worksheet->setCellValueByColumnAndRow(1, 2, 'name'); $worksheet->setCellValueByColumnAndRow(2, 2, 'phone'); $worksheet->setCellValueByColumnAndRow(3, 2, 'radio1'); $worksheet->setCellValueByColumnAndRow(4, 2, 'style'); $worksheet->setCellValueByColumnAndRow(5, 2, 'time'); //合並單元格 $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); ; $jzInfo = db('wdjz')->select(); $len = count($jzInfo); $j = 0; for ($i=0; $i < $len; $i++) { $j = $i + 3; //從表格第3行開始 $worksheet->setCellValueByColumnAndRow(1, $j, $jzInfo[$i]['name']); $worksheet->setCellValueByColumnAndRow(2, $j, $jzInfo[$i]['phone']); $worksheet->setCellValueByColumnAndRow(3, $j, $jzInfo[$i]['radio1']); $worksheet->setCellValueByColumnAndRow(4, $j, $jzInfo[$i]['style']); $worksheet->setCellValueByColumnAndRow(5, $j, $jzInfo[$i]['time']); } $styleArrayBody = [ 'borders' => [ 'allBorders' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => '666666'], ], ], 'alignment' => [ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, ], ]; $total_jzInfo = $len + 2; //添加所有邊框/居中 $worksheet->getStyle('A1:C'.$total_jzInfo)->applyFromArray($styleArrayBody); $filename = 'wdjz無毒樣板客戶表.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'); }
-----------------------------------摘取大神文檔---------------------------------------------------------------------
1.設置表頭
首先我們引入自動加載PhpSpreadsheet庫,然后實例化,設置工作表標題名稱為:學生成績表,接着設置表頭內容。表頭分為兩行,第一行是表格的名稱,第二行數表格列名稱。最后我們將第一行單元格進行合並,並設置表頭內容樣式:字體、對齊方式等。
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);
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');
PhpSpreadsheet提供了很多選項設置,接下來的文章我會專門介紹有關生成Excel的設置,如樣式:字體、對齊、顏色、行高於列寬,合並與拆分、圖片、日期時間、換行、函數使用等等。敬請關注。