PHP Spreadsheet导入Excel至数据库仅录入首行问题求助
问题分析与解决方案
你的代码存在两个核心问题,导致仅能导入单行数据:
- 循环条件错误:
$row < $highestRow会遗漏最后一行数据,因为getHighestRow()返回的是Excel中最后一行的行号,必须用$row <= $highestRow才能遍历所有数据行。 - 数组赋值错误:每次循环都在覆盖一维数组
$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
相关产品推荐
相关产品推荐

