如何使用openpyxl删除Excel行的同时清除其填充颜色?
解决openpyxl删除行后填充颜色残留的问题
当使用openpyxl的delete_rows方法删除行时,该方法仅移除行内的数据和单元格对象,但不会自动清除行级或单元格级的填充样式。要实现删除行的同时移除对应填充颜色,需要先手动清除目标行的填充样式,再执行删除操作。
解决方案代码
import openpyxl from openpyxl.styles import PatternFill src_fname_path = "./test_delete_row.xlsx" new_fname_path = "./test_delete_row.delete.xlsx" # 加载工作簿和工作表 src_book = openpyxl.load_workbook(src_fname_path) sheet = src_book['Sheet1'] # 创建无填充的样式对象 no_fill = PatternFill(fill_type=None) # 遍历目标行,清除每个单元格的填充样式 for row in sheet.iter_rows(min_row=1, max_row=3): for cell in row: cell.fill = no_fill # 额外清除行级别的填充样式(若填充是应用在整行上) for row_num in range(1, 4): sheet.row_dimensions[row_num].fill = no_fill # 删除目标行 sheet.delete_rows(1, 3) # 保存修改后的工作簿 src_book.save(new_fname_path)
关键说明
- 清除单元格级填充:通过
iter_rows遍历目标行的所有单元格,将每个单元格的填充样式重置为无填充(fill_type=None),覆盖单个单元格的填充设置。 - 清除行级填充:部分场景下填充颜色是直接应用在整行的样式上,因此需要额外重置
row_dimensions对应的填充样式,避免行级样式残留。 - 执行顺序:必须先清除样式,再执行
delete_rows操作,确保残留的样式被彻底移除后再删除行结构。
内容的提问来源于stack exchange,提问作者Oliver Chen
相关产品推荐
相关产品推荐

