使用PHPExcel按列读取Excel并导入数据库的实现问题
Excel数据导入数据库:实现A1取值+B2-B8循环读取逻辑
需求回顾
- 先读取A1单元格数据,作为每条记录的公共标识(如
id_solicitud) - 循环读取N组数据,每组取B列连续7行(如B2-B8、B9-B15等),对应原TXT逻辑中的批量读取规则
- 将每组数据按字段映射后插入数据库
解决代码(基于PhpSpreadsheet)
// 加载Excel文件(确保已正确初始化PhpSpreadsheet依赖) $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); $spreadsheet = $reader->load($inputFileName); $worksheet = $spreadsheet->getActiveSheet(); // 获取A1单元格的值,作为id_solicitud $id_solicitud = trim($worksheet->getCell('A1')->getValue()); // 初始化分组起始行,每组占用7行B列数据 $startRow = 2; $rowsPerGroup = 7; // 循环处理每组数据 while (true) { // 检查当前组首行B列是否有数据,无数据则终止循环 $currentCell = $worksheet->getCell("B{$startRow}"); if (empty(trim($currentCell->getValue()))) { break; } $groupData = []; // 读取当前组的7行B列数据 for ($i = 0; $i < $rowsPerGroup; $i++) { $rowNum = $startRow + $i; $cellValue = trim($worksheet->getCell("B{$rowNum}")->getValue()); $groupData[] = $cellValue; } // 组装数据库插入数据,与原TXT逻辑保持一致 $medida_data = [ 'id_solicitud' => $id_solicitud, 'programa' => 1, 'orden' => $groupData[0], 'ges' => $groupData[1], 'dimension' => $groupData[2], 'actividades' => $groupData[3], 'ejecucion' => $groupData[4], 'fecha_comprometida' => date('Y-m-d', strtotime($groupData[5])), 'fecha_creacion' => date('Y-m-d'), 'plazo' => $groupData[6], 'estado' => 1 ]; // 调用模型插入数据库 $this->propuestas_model->register_medida_plan($medida_data); // 跳转到下一组起始行 $startRow += $rowsPerGroup; } // 释放资源 $spreadsheet->disconnectWorksheets(); unset($spreadsheet);
关键说明
- 指定单元格读取:通过
getCell('A1')直接定位目标单元格,无需逐行遍历,解决列跳转问题 - 分组循环控制:用
startRow标记每组起始位置,每次循环后偏移7行,实现批量分组读取 - 空数据判断:通过检查每组首行B列值是否为空,避免无效循环
- 日期兼容性处理:如果Excel日期格式非标准,可替换为PhpSpreadsheet内置的日期转换方法:
// 替换fecha_comprometida的处理逻辑 $dateCell = $worksheet->getCell("B".($startRow + 5)); if (\PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($dateCell)) { $fecha_comprometida = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($dateCell->getValue())->format('Y-m-d'); } else { $fecha_comprometida = !empty($groupData[5]) ? date('Y-m-d', strtotime($groupData[5])) : null; }
内容的提问来源于stack exchange,提问作者Nicolas Rudisky
相关产品推荐
相关产品推荐

