Laravel Excel导入仅取索引0工作表时如何移除外层包裹的sheet数组
解决方案
方案1:直接提取目标工作表内容(无需修改Import类)
因为你实现了WithMultipleSheets接口,toCollection返回的外层集合是所有选中工作表的容器,你只需要索引为0的工作表,直接提取该元素即可,修改控制器代码:
$filePath = 'import-excel.xlsx'; $import = new Import(); // 直接取第一个工作表的内容 $rows = $import->toCollection($filePath)->first(); dd($rows->toArray());
方案2:移除多工作表适配逻辑(更适合单工作表导入场景)
如果你仅需要处理固定的第一个工作表,不需要多工作表适配能力,可以直接去掉WithMultipleSheets相关实现,Import类修改后如下:
<?php namespace App\Imports; use Maatwebsite\Excel\Concerns\Importable; use Maatwebsite\Excel\Concerns\SkipsEmptyRows; use Maatwebsite\Excel\Concerns\WithCalculatedFormulas; class Import implements SkipsEmptyRows, WithCalculatedFormulas { use Importable; }
此时控制器不需要额外处理,原代码调用toCollection直接返回第一个工作表的内容:
$filePath = 'import-excel.xlsx'; $import = new Import(); $rows = $import->toCollection($filePath); dd($rows->toArray());
原理解释
当你实现WithMultipleSheets接口时,Laravel Excel会将每个工作表的导入结果按你在sheets()方法中定义的索引,统一包裹在一个外层集合/数组中返回,所以会出现你遇到的两层外层包裹结构。两种方案都是通过要么直接提取目标工作表内容,要么去掉多工作表逻辑,来得到你需要的直接返回行数据的结构。
内容的提问来源于stack exchange,提问作者Panji Setya Nur Prawira
相关产品推荐
相关产品推荐

