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,
        ];
    }
}

这样你就可以在一个类里继续写其他的导入逻辑了。

(adsbygoogle = window.adsbygoogle || []).push({});