Laravel Excel 默认会导入全部 sheet 的数据,当一个文件有多个工作表时,每个工作表都会经过导入对象。如果您想分别处理每张工作表,则需要实现 WithMultipleSheets 接口。通过 sheets() 方法返回一个工作表导入对象数组。数组的顺序很重要,数组中的第一个工作表导入对象将自动链接到 Excel 文件中的第一个工作表。
namespace App\Imports;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class UsersImport implements WithMultipleSheets
{
public function sheets(): array
{
return [
0 => new FirstSheetImport()//用于导入第一个 sheet
];
}
}
然后创建对应的 FirstSheetImport 即可
namespace App\Imports;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class FirstSheetImport implements ToCollection
{
public function collection(Collection $rows)
{
//
}
}
如果嫌两个类麻烦,那也可以通过创建对本身的引用的方式来更简单的实现:
namespace App\Imports;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class UsersImport implements WithMultipleSheets
{
public function sheets(): array
{
return [
0 => $this,
];
}
}
这样你就可以在一个类里继续写其他的导入逻辑了。