Codeigniter Excel数据导入异常:两条数据仅插入一条
解决PHPExcel导入Excel仅插入1条数据的问题
看起来你在使用PHPExcel导入Excel数据时碰到了个小麻烦——明明Excel里有2条记录,结果只成功插入了1条。咱们一步步来拆解问题,找出原因。
首先先把你提供的代码片段整理出来,方便分析:
$objReader= PHPExcel_IOFactory::createReader('Excel2007'); // For excel 2007 //Set to read only $objReader->setReadDataOnly(true); //Load excel file $objPHPExcel=$objReader->load(FCPATH.'media/export_redeem/'.$file_name); $allDataInSheet = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); $arrayCount = count($allDataInSheet); for($i=2;$i<...
最可能的原因:循环条件错误
从你写的for($i=2;$i<...来看,大概率是循环的终止条件写错了。
PHPExcel读取Excel时,行号是从1开始的:
- 第1行通常是表头
- 第2、3行是你的2条数据记录
count($allDataInSheet)得到的是总行数(表头+数据行),假设Excel里是1表头+2数据,那$arrayCount的值是3。
如果你的循环条件是$i < $arrayCount,那循环只会执行$i=2这一次(因为2<3成立,3<3不成立),自然只插入1条数据。
修正方案:把循环条件改成$i <= $arrayCount,这样$i=2和$i=3都会执行,两条数据都能被处理。
其他可能的排查方向
如果循环条件没问题,那可以从这几个方面排查:
- 确认数据是否被正确读取:在循环前打印
$arrayCount和$allDataInSheet数组,看看第二条数据是不是真的被PHPExcel读到了。比如:
要是数组里只有表头和1条数据,那说明Excel文件本身可能有问题(比如第二条数据是隐藏行,或者单元格全为空)。echo "总行数:".$arrayCount."<br>"; print_r($allDataInSheet); - 检查数据库插入错误:第二条数据可能因为字段不匹配、必填项为空、数据格式错误等原因插入失败,但你没捕获错误。可以在插入代码后添加错误检查:
// 假设用mysqli连接数据库 $result = mysqli_query($conn, $insertSql); if(!$result){ echo "插入第".$i."行失败:".mysqli_error($conn); } - 检查Excel数据格式:看看第二条数据的单元格有没有特殊字符、格式错误(比如日期格式不兼容数据库,或者数字是文本格式),这些都可能导致插入失败。
修正后的完整示例代码
$objReader= PHPExcel_IOFactory::createReader('Excel2007'); // For excel 2007 $objReader->setReadDataOnly(true); $objPHPExcel=$objReader->load(FCPATH.'media/export_redeem/'.$file_name); $allDataInSheet = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); $arrayCount = count($allDataInSheet); // 调试:确认读取的数据 echo "读取到的总行数:".$arrayCount."<br>"; print_r($allDataInSheet); // 修正循环条件 for($i=2; $i <= $arrayCount; $i++){ $rowData = $allDataInSheet[$i]; // 替换成你的数据库字段和插入逻辑 $insertSql = "INSERT INTO your_table (column1, column2) VALUES ('".mysqli_real_escape_string($conn, $rowData['A'])."', '".mysqli_real_escape_string($conn, $rowData['B'])."')"; $result = mysqli_query($conn, $insertSql); if($result){ echo "第".$i."行数据插入成功<br>"; } else { echo "第".$i."行插入失败:".mysqli_error($conn)."<br>"; } }
先试试调整循环条件,这应该是最常见的问题。如果还是不行,通过调试信息就能快速定位到是读取数据的问题还是插入的问题啦。
内容的提问来源于stack exchange,提问作者axech
相关产品推荐
相关产品推荐

