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

PHP Spreadsheet导入Excel至数据库仅录入首行问题求助

问题分析与解决方案

你的代码存在两个核心问题,导致仅能导入单行数据:

  1. 循环条件错误:$row < $highestRow 会遗漏最后一行数据,因为getHighestRow()返回的是Excel中最后一行的行号,必须用$row <= $highestRow才能遍历所有数据行。
  2. 数组赋值错误:每次循环都在覆盖一维数组$data_detail的内容,而非将每行数据作为新元素添加到数组中,最终只会保留最后一行数据(若循环执行多次)。

修改后的代码

$request->validate([
    'uploaded_file' => 'required|file|mimes:xls,xlsx'
]);

$excel_file = $request->file('uploaded_file');
$file = IOFactory::load($excel_file->getRealPath());

$worksheet = $file->getActiveSheet();
$highestRow = $worksheet->getHighestRow();

$data_detail = [];

// 修正循环条件,确保遍历所有数据行
for ($row = 9; $row <= $highestRow; $row++) {
    // 将每行数据作为新元素添加到二维数组中
    $data_detail[] = [
        'codice_articolo' => $worksheet->getCell("A$row")->getValue(),
        'quantita' => $worksheet->getCell("B$row")->getValue(),
        'prezzo' => $worksheet->getCell("C$row")->getValue()
    ];
}

// 批量插入数据库(示例,根据你的实际模型/表名调整)
// 若使用Eloquent模型:
// YourModel::insert($data_detail);
// 若使用原生SQL:
// DB::table('your_table_name')->insert($data_detail);

补充说明

  • 修改后$data_detail会成为二维数组,每个元素对应Excel中的一行数据,通过批量插入方法可一次性导入所有行。
  • 若Excel中quantita或prezzo为数字格式,getValue()可能返回字符串,可根据数据库字段类型转换为整数/浮点数,避免类型不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:24:32