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

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读到了。比如:
    echo "总行数:".$arrayCount."<br>";
    print_r($allDataInSheet);
    
    要是数组里只有表头和1条数据,那说明Excel文件本身可能有问题(比如第二条数据是隐藏行,或者单元格全为空)。
  • 检查数据库插入错误:第二条数据可能因为字段不匹配、必填项为空、数据格式错误等原因插入失败,但你没捕获错误。可以在插入代码后添加错误检查:
    // 假设用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:19:02