ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

tp6安装、封装phpspreadsheet

2022-06-27 14:04:35  阅读:237  来源: 互联网

标签:封装 totalCol self param phpspreadsheet tp6 sheet col row


1、安装phpspreadsheet

composer require phpoffice/phpspreadsheet

2、封装类

<?php

namespace excel;

use PHPExcel_IOFactory;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;

class Excel
{

//    public function test()
//    {
//        $data = [
//            ['title1' => '111', 'title2' => '111'],
//            ['title1' => '222', 'title2' => '222'],
//            ['title1' => '333', 'title2' => '333']
//        ];
//        $mergeCells = [
//            ['A1:B1'=>'第一行标题','C1:F1'=>'第一111行标题'],
//            ['A2:B2'=>'第一行标题','C2:E2'=>'第一222行标题'],
//        ];
//        $tableHeader = [
//            ['第一行标题','第一行标题'],
//            ['第二行标题', '第二行标题']
//        ];
//        $fileName = "8888.xlsx";
//
//        $data = Excel::saveFile($data, $fileName, $tableHeader,$mergeCells);
//
//        var_dump($data);
//        exit;
//    }

    public static $excelCol = ['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'];

    public static $setBold = false;
    public static $setName = '宋体';
    public static $setSize = '12';
    public static $setBgRGB = 'FFFFFFFF';
    public static $setFontRGB = 'FF000000';
    public static $styleArray = [
        'alignment' => [
            'horizontal' => Alignment::HORIZONTAL_CENTER,
            'vertical' => Alignment::VERTICAL_CENTER
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => Border::BORDER_THIN,
                'color' => ['argb' => '000000'],
            ],
        ],
    ];

    /**
     * 读取excel
     * @param $filePath
     * @param int $pageIndex
     * @param int $readRow
     * @return array
     * @throws \PhpOffice\PhpSpreadsheet\Exception
     */
    public static function read($filePath, $pageIndex = 0,$readRow = 0)
    {
        //加载文件
        $spreadSheet = IOFactory::load($filePath);
        //获取文件内容
        $workSheet = $spreadSheet->getSheet($pageIndex)->toArray('', true, true, false);
        //删除表头几行
        if ($readRow > 0) {
            for ($i = 0; $i < $readRow; $i++) {
                array_shift($workSheet);
            }
        }
        return $workSheet;
    }

    /**
     * 下载文件
     * @param $data
     * @param $fileName
     * @param array $tableHeader
     * @param array $mergeCells
     * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
     */
    public static function download($data, $fileName, $tableHeader = [], $mergeCells = [], $suffix = 'xlsx')
    {
        $spreadsheet = self::write($data, $tableHeader, $mergeCells);
        // 将输出重定向到客户端的网络浏览器(Xlsx)
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="' . $fileName . '"');//文件名
        header('Cache-Control: max-age=0');
        // 如果你服务于IE 9,那么以下可能是需要的
        header('Cache-Control: max-age=1');
        // 如果您通过SSL为工业工程服务,那么可能需要以下内容
        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
        header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header('Pragma: public'); // HTTP/1.0
        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, ucwords($suffix));
        $writer->save('php://output');

    }

    /**
     * 保存文件
     * @param $data
     * @param $fileName
     * @param array $tableHeader
     * @param array $mergeCells
     * @throws \PhpOffice\PhpSpreadsheet\Exception
     * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
     */
    public static function saveFile($data, $fileName, $tableHeader = [], $mergeCells = [], $suffix = 'xlsx')
    {
        $spreadsheet = self::write($data, $tableHeader, $mergeCells);
        $writer = IOFactory::createWriter($spreadsheet, ucwords($suffix));
        $writer->save($fileName, true);
        exit;
    }

    /**
     * 写入数据
     * @param $data
     * @param $tableHeader
     * @param $mergeCells
     * @return Spreadsheet
     * @throws \PhpOffice\PhpSpreadsheet\Exception
     */
    public static function write($data, $tableHeader, $mergeCells)
    {
        // 创建excel对象
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $totalCol = 0;

        //设置表头合并单元格
        foreach ($mergeCells as $row => $rows) {
            $i = 0;
            foreach ($rows as $col => $colValue) {
                //合并单元格
                $sheet->mergeCells($col);
                //设置样式
                self::setStyle($sheet, $i, $totalCol, $row);
                //单元格内容写入
                $sheet->setCellValue(substr($col, 0, strpos($col, ":")), $colValue);
                $i++;
            }
        }
        $totalCol = count($mergeCells);

        //设置表头
        foreach ($tableHeader as $row => $rows) {
            $headerRowDatas = array_values($rows);
            foreach ($headerRowDatas as $col => $colValue) {
                //设置样式
                self::setStyle($sheet, $col, $totalCol, $row);
                //单元格内容写入
                $sheet->setCellValue(self::$excelCol[$col] . ($totalCol + $row + 1), $colValue);
            }
        }
        $totalCol += count($tableHeader);

        //设置内容
        foreach ($data as $row => $rows) {
            $rowDatas = array_values($rows);
            foreach ($rowDatas as $col => $colValue) {
                // 单元格内容写入
                $sheet->setCellValue(self::$excelCol[$col] . ($totalCol + $row + 1), $colValue);
            }
        }
        return $spreadsheet;
    }

    /**
     * 设置单元格样式
     * @param $sheet
     * @param $col
     * @param $totalCol
     * @param $row
     */
    public static function setStyle($sheet, $col, $totalCol, $row)
    {
        //设置单元格居中
        $sheet->getStyle(self::$excelCol[$col] . ($totalCol + $row + 1))->applyFromArray(self::$styleArray);
        //设置单元格
        $sheet->getStyle(self::$excelCol[$col] . ($totalCol + $row + 1))
            ->getFill()
            ->setFillType(Fill::FILL_SOLID)
            ->getStartColor()
            ->setRGB(self::$setBgRGB);
        //设置单元格字体样式、字体、字体大小
        $sheet->getStyle(self::$excelCol[$col] . ($totalCol + $row + 1))
            ->getFont()
            ->setBold(self::$setBold)
            ->setName(self::$setName)
            ->setSize(self::$setSize);
        //设置字体颜色
        $sheet->getStyle(self::$excelCol[$col] . ($totalCol + $row + 1))
            ->getFont()
            ->getColor()->setRGB(self::$setFontRGB);
    }
}

 

标签:封装,totalCol,self,param,phpspreadsheet,tp6,sheet,col,row
来源: https://www.cnblogs.com/bpsh/p/16415844.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有