Laravel-excel 指定读取的最大列
背景:项目中有在队列中使用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';
}
}
![]()
注意, 你的
Import
类,不能实现SkipsEmptyRows
接口,否则WithColumnLimit
无效,因为底层判断了只有没实现SkipsEmptyRows
接口才走WithColumnLimit
逻辑
本作品采用《CC 协议》,转载必须注明作者和本文链接
PHP Excel 扩展 xlswriter 更香 博客:为性能而生,PHP Excel 扩展 xlswriter 1.3.3 发布!