如何在Python中保留原Excel格式保存并实现条件单元格着色?
使用openpyxl实现带格式Excel的条件格式设置
直接上可运行代码,完全基于openpyxl操作,保留原Excel的所有格式:
from openpyxl import load_workbook from openpyxl.styles import PatternFill # 定义填充颜色 green_fill = PatternFill(start_color="00FF00", end_color="00FF00", fill_type="solid") red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid") # 加载Excel文件,data_only=False保留原格式和公式 wb = load_workbook("your_file.xlsx", data_only=False) # 遍历所有工作表 for ws in wb.worksheets: # 遍历每行(从第2行开始,假设第1行是表头) for row in ws.iter_rows(min_row=2): b_cell = row[1] # B列是索引1(从0开始计数) # 判断B列单元格是否为数值类型 if b_cell.data_type == "n": b_value = b_cell.value # 遍历当前行的其他列(跳过B列) for cell in row: if cell == b_cell: continue # 仅当当前单元格是数值时才执行对比 if cell.data_type == "n": diff = abs(cell.value - b_value) # 用绝对值差,可根据需求修改计算逻辑 if diff > 10: cell.fill = green_fill elif diff < 10: cell.fill = red_fill # 等于10的情况可自行添加处理逻辑 # 保存修改后的文件(建议先备份原文件,可选择覆盖原文件或另存为) wb.save("modified_file.xlsx")
关键说明:
load_workbook的data_only=False必须保留,否则会丢失原文件的公式和格式设置。- 代码默认从第2行开始处理,若表头行数不同,修改
min_row的值即可。 - 对比逻辑用了绝对值差,如需其他对比方式(如其他列值直接减B列值),直接修改
diff的计算方式。 - 仅当B列和目标列均为数值类型时才执行对比,自动跳过文本、空值等非数值单元格。
- 操作前建议备份原文件,避免失误导致数据损坏。
内容的提问来源于stack exchange,提问作者purplecollar
相关产品推荐
相关产品推荐

