
PHPSpreadsheet 提供了 removeRow() 方法,可直接删除工作表中指定行号的整行数据(含单元格内容、样式、公式等),操作简洁高效。
phpspreadsheet 提供了 `removerow()` 方法,可直接删除工作表中指定行号的整行数据(含单元格内容、样式、公式等),操作简洁高效。
在使用 PHPSpreadsheet 处理 Excel 文件时,若需动态清理数据(例如移除空行、错误行或标题前冗余行),删除整行是常见需求。与手动遍历移动单元格不同,Worksheet::removeRow(int $row) 是官方支持的原生方法,它会自动将下方所有行上移填补空位,并同步更新行高、合并单元格引用、条件格式及数据验证规则等关联属性,确保工作表结构完整性。
✅ 基本用法示例:
use PhpOffice\PhpSpreadsheet\IOFactory;
// 加载 Excel 文件
$spreadsheet = IOFactory::load('data.xlsx');
$worksheet = $spreadsheet->getActiveSheet();
// 删除第 13 行(注意:行号从 1 开始计数)
$worksheet->removeRow(13);
// 保存修改后的文件
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('data_cleaned.xlsx');⚠️ 注意事项:
- 行号参数为从 1 开始的整数(非数组索引),例如 removeRow(1) 删除首行;
- 若删除行超出当前工作表最大行数(如 removeRow(1000) 但实际仅 50 行),方法静默忽略,无异常抛出;
- 删除操作不可逆,建议操作前备份原始文件或使用 clone 创建副本;
- 合并单元格若跨越被删行,其引用区域将自动收缩(如 A1:C3 删除第 2 行后变为 A1:C2);
- 公式中对被删行的引用(如 =SUM(A13:A20))会自动重写为 =SUM(A12:A19),无需手动调整。
? 批量删除多行?
removeRow() 不支持范围参数,需倒序调用以避免行号偏移:
立即学习“PHP免费学习笔记(深入)”;
// 删除第 5、10、15 行(按降序执行,防止因上移导致目标行错位)
foreach ([15, 10, 5] as $row) {
$worksheet->removeRow($row);
}综上,removeRow() 是安全、可靠且符合 Excel 逻辑的删除方案,推荐作为删除行操作的首选方法。



















