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

Laravel中Maatwebsite Excel控制器向多工作表导入传数据报错解决

Laravel中Maatwebsite Excel多工作表导入数据传递报错解决

问题场景

在Laravel框架中使用Maatwebsite Excel导入带多工作表的Excel文件,需要将上传相关的datasubmit数据传递给导入类以关联MySQL中的其他数据,但运行时报错:

Undefined property: App\Imports\TargetSheetImport::$data

直接使用TargetHeaderImport单工作表导入时功能正常,但当前Excel有2个工作表,仅需导入其中一个。

相关代码

控制器代码

public function upload(Request $request){

  $file = $request->filebabp;
  if($file) {
    $nama_file = Carbon::now()->setTimezone('Asia/Jakarta')->format('Ymd-His').'-'.$file->getClientOriginalName();

    $datasubmit['file'] = $file;
    $datasubmit['upload_date'] = Carbon::now()->setTimezone('Europe/Belarusia')->format('Y-m-d H:i:s');
    $datasubmit['nama_file'] = $nama_file;
    $datasubmit['version'] = 'NEW';

    $file->move(public_path('files/'), $nama_file);
    $upload = Excel::import(new TargetUpload($datasubmit), base_path('public/files/'.$nama_file));
}
  return $this->sendResponse($file, 'Submit successfully');
}

多工作表导入类代码

use Importable;

protected $data;

function __construct($data) {
        $this->data = $data;
}

public function sheets($data): array
{
    return [
        0 => new TargetHeaderImport($data),
    ];
}

报错原因与解决方法

核心问题

多工作表导入类的sheets方法错误地使用了方法参数$data,而非构造函数中初始化的类成员变量$this->data。Maatwebsite Excel的sheets方法会自动传入内部工作表数据,并非你在控制器中传递的datasubmit。

修正步骤

  1. 修改多工作表导入类的sheets方法,移除方法参数$data,改用类成员变量$this->data:
public function sheets(): array
{
    return [
        0 => new TargetHeaderImport($this->data),
    ];
}
  1. 核对类命名一致性:控制器中实例化的是TargetUpload,但报错提示的是TargetSheetImport,确认多工作表导入类的类名是否为TargetUpload,避免因类名拼写错误导致属性未定义问题。

  2. 额外检查:控制器中$request->filebabp疑似笔误,正确的文件获取方式应为$request->file('babp'),若此处错误会导致文件无法正常获取,需同步修正。

替代方案(若构造函数传递仍有问题)

可临时将datasubmit存入Session,在导入类中取出使用:

  • 控制器中添加:
session(['datasubmit' => $datasubmit]);
  • 在TargetHeaderImport中获取:
$datasubmit = session('datasubmit');
// 使用后可清除session
session()->forget('datasubmit');

内容的提问来源于stack exchange,提问作者Test Doang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:11:01