🦔

Laravel Excelの空行スキップでハマったときの対処法

2024/11/12に公開

はじめに

Laravel Excelで空行をスキップしようとしてハマったので対処法を残します!

環境

  • php 8.2
  • Laravel 11.23
  • Laravel Excel 3.1.58

現象

ExcelファイルをDBのテーブルに保存するシステムを作っており、SkipsEmptyRowsを使って空行をスキップしていました

class UserImport implements ToModel, SkipsEmptyRows, WithStartRow, ...
...
// 一行目がヘッダーなので除外
public function startRow(): int
{
    return 2;
}

うまくいく分

  • 以下のようなExcelファイルならスキップできていました

  • 正しく4行目がスキップされてインポートされます

問題がおきた分

見た目だとわかりにくいですが、以下のようなデータが複数行にまたがっているExcelファイルだと2行目で Not null violation が発生してしまいました。2行A列、2行B列などはnull扱いになっているようです
※bio列はテーブルに取り込む必要はないとします
※name, emailはNot nullです

対処

以下を追記するとnullの部分がスキップされてインポート成功しました

public function isEmptyWhen(array $row): bool
{
    return $row['email'] === null;
}

インポート分

最後に

ブラウザ版のExcelからファイルを見ると各行にデータが入っていましたが、デスクトップ版だと複数行にまたがっていました…表示のされ方が違うんですね(ずっとブラウザ版を見ており気づけず)

色々トラップがあったので勉強になりました!!

参考

Discussion