PhpSpreadsheet導入導出excel

封裝一個類:

<?php

require __DIR__.'/vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as ReaderXlsx;

class MyPhpSpreadsheet{

    /**
     * 讀取xlsx(導入)
     * @param 上傳的臨時文件地址
     */
    public function read_xlsx($files){
        $tmp = $files['tmp_name'];
        if(empty($tmp)){
            throw new Exception('請選擇要導入的Xlsx文件');
        }

        $reader = new ReaderXlsx();
        $spreadsheet = $reader->load($tmp);
        $sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
        var_dump($sheetData);exit;
        
    }


    /**
     * 導出excel
     */
    public function arrayToXlsx($data,$title){

        $spreadsheet = new Spreadsheet();
        $worksheet = $spreadsheet->getActiveSheet();

        //設置工作表標題名稱
        $worksheet->setTitle('工作表格1');

        //表頭 設置單元格內容
        foreach ($title as $key => $value) {
            $worksheet->setCellValueByColumnAndRow($key+1, 1, $value);
        }

        $row = 2; //從第二行開始
        foreach ($data as $item) {
            $column = 1; //從第一列設置並初始化
            foreach ($item as $value) {
                $worksheet->setCellValueByColumnAndRow($column, $row, $value); //哪一列哪一行設置哪個值
                $column++; //列數加1
            }
            $row++; //行數加1
        }

        //輸出到瀏覽器
        $fileName = date('YmdHis',time());
        $fileType = 'Xlsx';
        $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
        $this->excelBrowserExport($fileName, $fileType);
        $writer->save('php://output');

    }

    public function excelBrowserExport($fileName, $fileType) {
        //文件名稱校驗
        if(!$fileName) {
            throw new Exception('文件名不能爲空');
        }

        //Excel文件類型校驗
        $type = ['Excel2007', 'Xlsx', 'Excel5', 'xls'];
        if(!in_array($fileType, $type)) {
            throw new Exception('未知文件類型');
        }

        if($fileType == 'Excel2007' || $fileType == 'Xlsx') {
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename="'.$fileName.'.xlsx"');
            header('Cache-Control: max-age=0');
        } else {
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="'.$fileName.'.xls"');
            header('Cache-Control: max-age=0');
        }
    }
}

導出調用:

$data = [
            [1, 'jack', 10],
            [2, 'mike', 12],
            [3, 'jane', 21],
            [4, 'paul', 26],
            [5, 'kitty', 25],
            [6, 'yami', 60],
        ];

$title = ['id', 'name', 'age'];
$MyPhpSpreadsheet = new MyPhpSpreadsheet();
$MyPhpSpreadsheet->arrayToXlsx($data,$title);

導入調用:

前端input type='file' 上傳 ,後端讀取$_FILES

 

參考:https://www.cnblogs.com/itbsl/p/10369695.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章