解决php通过phpexcel导出多个sheet时产生的额外空的worksheet

解决方式就是重置Excel的run方法

<?php

namespace common\services\common;

use moonland\phpexcel\Excel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use yii\base\InvalidConfigException;


class ErpExcel extends Excel
{
    /**
     * 重置run方法,解决创建多个sheet时,会产生一个额外的空的worksheet
     * @return array|\moonland\phpexcel\multitype|string|void
     * @throws InvalidConfigException
     * @throws \PhpOffice\PhpSpreadsheet\Exception
     */
    public function run()
    {
        if ('export' == $this->mode) {
            $sheet = new Spreadsheet();

            if (!isset($this->models)) {
                throw new InvalidConfigException('Config models must be set');
            }

            if (isset($this->properties)) {
                $this->properties($sheet, $this->properties);
            }

            if ($this->isMultipleSheet) {
                $index = 0;
                $worksheet = [];
                foreach ($this->models as $title => $models) {
                    if (0 === $index) {
                        $activeSheet = $sheet->getActiveSheet();
                        $activeSheet->setTitle($title);
                        $worksheet[$index] = $activeSheet;
                    } else {
                        $sheet->createSheet($index);
                        $sheet->getSheet($index)->setTitle($title);
                        $worksheet[$index] = $sheet->getSheet($index);
                    }
                    $columns = $this->columns[$title] ?? [];
                    $headers = $this->headers[$title] ?? [];
                    $this->executeColumns($worksheet[$index], $models, $this->populateColumns($columns), $headers);
                    ++$index;
                }
            } else {
                $worksheet = $sheet->getActiveSheet();
                $this->executeColumns($worksheet, $this->models, isset($this->columns) ? $this->populateColumns($this->columns) : [], $this->headers ?? []);
            }

            if ($this->asAttachment) {
                $this->setHeaders();
            }
            $this->writeFile($sheet);
            $sheet->disconnectWorksheets();
            unset($sheet);
        } elseif ('import' == $this->mode) {
            if (is_array($this->fileName)) {
                $datas = [];
                foreach ($this->fileName as $key => $filename) {
                    $datas[$key] = $this->readFile($filename);
                }

                return $datas;
            } else {
                return $this->readFile($this->fileName);
            }
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值