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

openpyxl设置行高后delete_rows无法彻底删除行的问题求助

解决openpyxl删除行后残留"幽灵空行"的问题

问题原因

当你通过row_dimensions设置或取消行高后,openpyxl会在工作表的row_dimensions字典中保留所有被操作过的行的维度记录。即使调用delete_rows删除了行,这些行维度元数据不会被自动清理,Excel读取文件时会根据这些元数据认为那些行依然存在,从而出现滚动条能滑到原最后一行的"幽灵空行"。

解决方案

删除行之后,手动清理row_dimensions中超出当前有效行范围的记录。因为删除行后,工作表的最大行号会更新,我们只需要保留行号≤当前最大行的维度信息即可。

修改后的代码

from openpyxl import Workbook

# 创建工作簿并激活工作表
wb = Workbook()
ws = wb.active

# 写入测试数据
for row in range(1, 101):
    for col in range(1, 6):
        ws.cell(row=row, column=col).value = f"Cell {row}-{col}"

# 设置行高
for row in ws.iter_rows():
    ws.row_dimensions[row[0].row].height = 14.4

# 取消行高
for row in ws.iter_rows():
    ws.row_dimensions[row[0].row].height = None

# 删除指定行
ws.delete_rows(35, 100-35)

# 关键:清理残留的行维度信息
max_row = ws.max_row
# 遍历row_dimensions的键(转成列表避免遍历中修改字典报错)
for row_num in list(ws.row_dimensions.keys()):
    if row_num > max_row:
        del ws.row_dimensions[row_num]

# 保存工作簿
wb.save('test.xlsx')

验证效果

运行修改后的代码,打开生成的test.xlsx:

  • 工作表中只有前34行有内容
  • 滚动条只能滑到第34行,不会出现到原100行的空行残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:52:05