php基于phpspreadsheet导出excel类封装

phpspreadsheet安装:

composer require phpoffice/phpspreadsheet

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
//可以生成多种格式类
use PhpOffice\PhpSpreadsheet\IOFactory;

class Excel
{

    /**
     * 导出数据
     * @param   $filename   文件名
     * @param   $title      表头
     * @param   $data       数据  
    * @throws \PhpOffice\PhpSpreadsheet\Exception
    * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
     */
    public function downloadExcel($filename,$title,$data)
    {
        $cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
            'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');

        $spreadsheet = new Spreadsheet();
        $spreadsheet->setActiveSheetIndex(0);

        $sheet = $spreadsheet->getActiveSheet();
        //表头长度
        $title_count = count($title);
        for($i=0 ; $i<$title_count ; $i++) {
            $sheet->setCellValue($cellName[$i].'1',$title[$i]);
        }
        //n列数据
        $column = $i;
        //行下标
        $index = 0;
        foreach ($data as $row_index => $row_value) {
            //写入excel第n行
            $index = $row_index+2;
            //列下标
            $cell_index = 0;
            foreach($row_value as $k => $v){
                //设置第n行数据的A,B,C...列
                if(!empty($v)){
                    $sheet->setCellValue($cellName[$cell_index].$index,$v);
                }

                $cell_index++;
            }
        }
        //n行数据加1行表头
        $row = $index;
        // 设置垂直居中
        $spreadsheet->getActiveSheet()->getStyle("A1:".($cellName[$column-1]).$row)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);

        // 设置水平居中
        $spreadsheet->getActiveSheet()->getStyle("A1:".($cellName[$column-1]).$row)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
        header("Content-Disposition: attachment;filename=$filename.xlsx");
        header('Content-Type: applicsation/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        $writer = IOFactory::createWriter($spreadsheet,'Xlsx');
        ob_end_clean();
        $writer->save('php://output'); 
    }

 

你可能感兴趣的:(类封装)