You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8导入XLSX文件时数据为空问题求助

问题原因与解决办法

核心问题

你同时实现了WithHeadingRow和WithStartRow接口,但在model方法里依然用数字索引($row[0]、$row[1])访问数据,这是矛盾的。

当启用WithHeadingRow时,Laravel Excel会将每行数据转换为关联数组,键对应Excel表头(即你设置的startRow=3那一行的内容),不再保留数字索引。所以用$row[0]自然取不到值。

解决方案

根据你的需求,有两种处理方式:

方式一:移除WithHeadingRow接口

如果你不需要用表头作为数组键,直接用数字索引读取数据,只保留WithStartRow接口即可:

// 修改ImportItem类的实现
class ImportItem implements ToModel, WithStartRow
{
    public function __construct($id_warrent)
    {
        $this->id_warrent = $id_warrent;
    }

    public function model(array $row)
    {
        return new WarrentItemModel([
            'id_warrent_item'    => Str::random(5),
            'warrent_entry_id'   => $this->id_warrent,
            'warr_item_category' => $row[0],
            'warr_item_code'     => $row[1],
            'warr_item_nup'      => $row[2],
            'warr_item_name'     => $row[3],
            'warr_item_type'     => $row[4],
            'warr_item_qty'      => $row[5],
            'warr_item_unit'     => $row[6]
        ]);
    }

    public function startRow(): int
    {
        return 3;
    }
}

方式二:改用表头键名访问数据

如果你需要保留WithHeadingRow(比如要通过表头名称关联字段),则需要把$row的数字索引换成表头对应的字符串键。假设你Excel第3行的表头是分类、编码、NUP、名称、类型、数量、单位,那么代码修改为:

public function model(array $row)
{
    return new WarrentItemModel([
        'id_warrent_item'    => Str::random(5),
        'warrent_entry_id'   => $this->id_warrent,
        'warr_item_category' => $row['分类'], // 替换为你实际的表头名称
        'warr_item_code'     => $row['编码'],
        'warr_item_nup'      => $row['NUP'],
        'warr_item_name'     => $row['名称'],
        'warr_item_type'     => $row['类型'],
        'warr_item_qty'      => $row['数量'],
        'warr_item_unit'     => $row['单位']
    ]);
}

注意:表头名称要和Excel里的完全一致(包括大小写、空格),或者可以用WithUppercaseHeadingRow等接口统一格式。

验证建议

修改后可以在model方法里用dd($row)再次确认数组结构,确保键名和你使用的一致。

内容的提问来源于stack exchange,提问作者Muhammad Fahmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:30:57