TP5使用Composer安裝phpoffice/phpspreadsheet,導出Excel文件


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的設置,如樣式:字體、對齊、顏色、行高於列寬,合並與拆分、圖片、日期時間、換行、函數使用等等。敬請關注。

 
        
 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM