Laravel Excel导入时如何按名称读取指定工作表?
问题根源
你混淆了WithMultipleSheets和WithEvents的用法,sheets()方法中不存在$event变量,该方法的核心作用是返回需要导入的工作表和对应处理类的映射关系。
方案1:直接按名称匹配(最简单)
仅需保留WithMultipleSheets实现,将目标工作表名作为数组键返回即可,扩展包会自动匹配对应名称的工作表导入,其余工作表自动忽略:
use Maatwebsite\Excel\Concerns\WithMultipleSheets; class ExecutedUPS implements WithMultipleSheets { private $nameSheetUPS = "LMS - F"; public function sheets(): array { return [ $this->nameSheetUPS => new SheetUPS(), ]; } }
你的SheetUPS类无需做任何修改。
方案2:自定义匹配逻辑
如果需要做模糊匹配、大小写忽略等自定义规则,可以结合BeforeSheet事件实现:
use Maatwebsite\Excel\Concerns\WithEvents; use Maatwebsite\Excel\Events\BeforeSheet; use Maatwebsite\Excel\Concerns\ToCollection; use Illuminate\Support\Collection; class ExecutedUPS implements ToCollection, WithEvents { private $nameSheetUPS = "LMS - F"; public function registerEvents(): array { return [ BeforeSheet::class => function(BeforeSheet $event) { // 名称不匹配则跳过当前工作表 if (trim($event->getSheet()->getTitle()) !== trim($this->nameSheetUPS)) { $event->skip(); } }, ]; } public function collection(Collection $collection) { // 此处直接编写原来SheetUPS类中的处理逻辑即可 } }
内容的提问来源于stack exchange,提问作者Robert Blasco Villarroya
相关产品推荐
相关产品推荐

