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

使用PHP实现仅导入Excel指定单个工作表数据至MySQL数据库

导入指定Excel工作表到MySQL的实现方法

你当前的代码使用getWorksheetIterator()遍历了Excel文件的全部工作表,所以会导入所有表的内容,只需取消遍历逻辑,直接获取指定工作表即可,有两种常用实现方式:

方案1:按工作表名称获取(更推荐)

如果目标工作表名称固定,直接调用getSheetByName()方法指定名称即可,兼容性更强,不会因为工作表顺序调整导致导入错误,示例代码如下:

$uploadfile=$_FILES['uploadfile']['tmp_name'];

require 'PHPExcel/Classes/PHPExcel.php';
require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
$objExcel = PHPExcel_IOFactory::load($uploadfile);
// 直接指定要导入的工作表名称,比如你的目标表叫「期末成绩」就填对应的名称
$worksheet = $objExcel->getSheetByName('期末成绩');

$highestrow = $worksheet->getHighestRow();
for($row=8;$row<=$highestrow;$row++){
    $name = $worksheet->getCellByColumnAndRow(1,$row)->getValue();
    $finalgrade = $worksheet->getCellByColumnAndRow(15,$row)->getValue();
    if($finalgrade != ''){
        $insertqry = "INSERT INTO `user`(`stud_name`, `final_grade`) VALUES ('$name','$finalgrade')";
        $insertres = mysqli_query($con,$insertqry);
    }  
}

方案2:按工作表索引获取

如果固定取第N个工作表,直接调用getSheet()方法传入索引即可,注意索引从0开始计数,第一个工作表对应索引0,第二个对应1,以此类推:

// 其他代码不变,仅替换获取工作表的逻辑
// 示例:取第一个工作表
$worksheet = $objExcel->getSheet(0);
// 后续处理逻辑和方案1一致

优化建议

  • 原代码直接拼接SQL语句存在SQL注入风险,建议替换为预处理语句,示例如下:
$stmt = mysqli_prepare($con, "INSERT INTO `user`(`stud_name`, `final_grade`) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $finalgrade);

$highestrow = $worksheet->getHighestRow();
for($row=8;$row<=$highestrow;$row++){
    $name = $worksheet->getCellByColumnAndRow(1,$row)->getValue();
    $finalgrade = $worksheet->getCellByColumnAndRow(15,$row)->getValue();
    if(trim($finalgrade) != ''){
        mysqli_stmt_execute($stmt);
    }  
}
  • PHPExcel已停止官方维护,若后续遇到PHP高版本兼容问题,可替换为其迭代版本PhpSpreadsheet,核心调用逻辑基本一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:06:07