使用openpyxl无法移除Excel整行设置的背景色,该如何解决?
解决openpyxl无法移除整行设置的背景色问题
问题原因
用LibreOffice Calc选中整行设置背景色时,是给行对象设置了默认填充样式,而非逐个单元格单独设置样式。你原来的代码只遍历修改了单个单元格的fill属性,不会影响行级别的默认样式,所以第1-3行的背景色无法被移除。
解决方案
需要同时处理行级默认填充和单元格单独填充:
- 先修改目标行的默认填充样式,清除行级背景色
- 再遍历单元格清除单独设置的填充(保留原逻辑,兼容混合场景)
完整代码示例
from openpyxl import load_workbook from openpyxl.styles import PatternFill src_fname_path = "./test_delete_row.3.xlsx" new_fname_path = "./test_delete_row.delete.3.xlsx" src_book = load_workbook(src_fname_path) sheet = src_book['Sheet1'] # 1. 清除第1-3行的行级默认填充样式 for row_num in range(1, 4): row = sheet[row_num] row.fill = PatternFill() # 2. 遍历所有单元格,清除单独设置的填充样式 for row in sheet: for cell in row: cell.fill = PatternFill() src_book.save(new_fname_path)
补充说明
- 如果需要清除整个工作表的所有行级样式,可以遍历
sheet.iter_rows()获取所有行对象统一处理 - 行级样式会作为单元格的默认样式生效,优先级高于未单独设置样式的单元格,因此必须先清除行级样式才能彻底移除背景色
内容的提问来源于stack exchange,提问作者Oliver Chen
相关产品推荐
相关产品推荐

