使用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
相关产品推荐
相关产品推荐

