Laravel-excel 指定读取的最大列

背景:项目中有使用队列读取excel的需求,小伙伴发现有些文件会导致队列异常退出,查询发现是用户上传的excel带有1万多列空列导致内存溢出,所以让 Import 类实现了 WithColumnLimit 接口,并定义 endColumn 方法,确定读取的最大的列,直接上代码


<?php

namespace App\Imports;

use App\Models\SettlementFileRow;
use Illuminate\Database\Eloquent\Model;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithColumnLimit;

class SettlementFileImport implements ToModel, WithColumnLimit
{

    public function model(array $row): array|Model|SettlementFileRow|null
    {
        return new SettlementFileRow($row);
    }

    public function endColumn(): string
    {
        //从A读取到L列,后面的列不再读取
        return 'L';
    }

}

:heavy_exclamation_mark: :heavy_exclamation_mark: 注意, 你的 Import 类,不能实现 SkipsEmptyRows 接口,否则 WithColumnLimit 无效,因为底层判断了只有没实现 SkipsEmptyRows 接口才走 WithColumnLimit 逻辑

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!