pin_drop当前位置:知识文库 ❯ 图文

openpyxl条件格式详解 - 自动高亮颜色渐变数据条教程

条件格式概述

条件格式(Conditional Formatting)是Excel中根据单元格值自动应用样式的功能。openpyxl支持创建各种条件格式规则,包括单元格值比较、颜色渐变、数据条、图标集等。条件格式可以让数据中的重要信息自动高亮显示,无需手动设置样式。

通过条件格式,可以实现很多自动化效果,例如:成绩超过90分自动标记为绿色、低于60分标记为红色、销售额排名靠前的单元格添加数据条等。这在制作数据报表、监控面板时非常实用。


语法与参数说明

基本语法

代码示例

from openpyxl.formatting.rule import CellIsRule, ColorScaleRule, DataBarRule

ws.conditional_formatting.add(range_string, rule)

CellIsRule参数说明

参数 类型 说明
operator str 比较运算符
formula list 比较值列表
fill PatternFill 满足条件的填充样式
font Font 满足条件的字体样式

operator运算符选项

说明
'greaterThan' 大于
'lessThan' 小于
'equal' 等于
'notEqual' 不等于
'greaterThanOrEqual' 大于等于
'lessThanOrEqual' 小于等于
'between' 介于两个值之间
'notBetween' 不介于两个值之间

ColorScaleRule参数说明

参数 类型 说明
start_type str 起始值类型:'min'/'num'/'percent'
start_color str 起始颜色(十六进制)
mid_type str 中间值类型
mid_color str 中间颜色
end_type str 结束值类型
end_color str 结束颜色

DataBarRule参数说明

参数 类型 说明
start_type str 起始值类型
end_type str 结束值类型
color str 数据条颜色(十六进制)

返回值说明

add()方法无返回值,条件格式规则直接添加到工作表中。可以通过ws.conditional_formatting._cf_rules查看已添加的规则数量。


代码示例详解

示例1:单元格值条件格式

演示如何根据成绩分数自动应用不同的背景颜色:

代码示例

from openpyxl import Workbook
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import Font, PatternFill

wb = Workbook()
ws = wb.active

# 写入数据
ws.append(['姓名', '成绩'])
scores = [['张三', 85], ['李四', 62], ['王五', 91],
          ['赵六', 45], ['钱七', 78], ['孙八', 55]]
for s in scores:
    ws.append(s)

# 条件格式1:成绩>=90,绿色背景
green_fill = PatternFill(start_color='C8E6C9', end_color='C8E6C9', fill_type='solid')
ws.conditional_formatting.add('B2:B7',
    CellIsRule(operator='greaterThanOrEqual', formula=['90'], fill=green_fill))

# 条件格式2:成绩<60,红色背景
red_fill = PatternFill(start_color='FFCDD2', end_color='FFCDD2', fill_type='solid')
red_font = Font(color='FF0000', bold=True)
ws.conditional_formatting.add('B2:B7',
    CellIsRule(operator='lessThan', formula=['60'], fill=red_fill, font=red_font))

# 条件格式3:成绩60-80,黄色背景
yellow_fill = PatternFill(start_color='FFF9C4', end_color='FFF9C4', fill_type='solid')
ws.conditional_formatting.add('B2:B7',
    CellIsRule(operator='between', formula=['60', '80'], fill=yellow_fill))

print(f"条件格式规则数: {len(ws.conditional_formatting._cf_rules)}")
wb.save('cond_format_cell.xlsx')
print("单元格条件格式文件已保存")

输出结果:

代码示例

条件格式规则数: 3
单元格条件格式文件已保存

示例2:颜色渐变与数据条

演示如何创建三色渐变和数据条效果:

代码示例

from openpyxl import Workbook
from openpyxl.formatting.rule import ColorScaleRule, DataBarRule

wb = Workbook()
ws = wb.active

# 写入数据
ws.append(['城市', '温度'])
temps = [['北京', 32], ['上海', 35], ['广州', 38],
         ['成都', 30], ['哈尔滨', 25], ['武汉', 37],
         ['深圳', 36], ['昆明', 22]]
for t in temps:
    ws.append(t)

# 颜色渐变:低温蓝色 -> 中温黄色 -> 高温红色
ws.conditional_formatting.add('B2:B9',
    ColorScaleRule(
        start_type='min', start_color='2196F3',
        mid_type='percentile', mid_value=50, mid_color='FFF176',
        end_type='max', end_color='F44336'
    ))

# 数据条
ws2 = wb.create_sheet('数据条')
ws2.append(['产品', '销量'])
sales = [['A', 100], ['B', 200], ['C', 150],
         ['D', 300], ['E', 250]]
for s in sales:
    ws2.append(s)

ws2.conditional_formatting.add('B2:B6',
    DataBarRule(
        start_type='min', end_type='max',
        color='2196F3'
    ))

print("颜色渐变与数据条设置完成")
wb.save('cond_format_colorscale.xlsx')
print("颜色渐变文件已保存")

输出结果:

代码示例

颜色渐变与数据条设置完成
颜色渐变文件已保存

示例3:公式条件格式

演示如何使用公式条件格式实现整行高亮效果:

代码示例

from openpyxl import Workbook
from openpyxl.formatting.rule import FormulaRule
from openpyxl.styles import Font, PatternFill

wb = Workbook()
ws = wb.active

# 写入数据
ws.append(['姓名', '部门', '工资'])
employees = [
    ['张三', '技术部', 15000],
    ['李四', '市场部', 12000],
    ['王五', '技术部', 18000],
    ['赵六', '财务部', 13000],
    ['钱七', '技术部', 16000],
]
for e in employees:
    ws.append(e)

# 公式条件格式:技术部整行高亮
tech_fill = PatternFill(start_color='E3F2FD', end_color='E3F2FD', fill_type='solid')
ws.conditional_formatting.add('A2:C6',
    FormulaRule(formula=['$B2="技术部"'], fill=tech_fill))

# 公式条件格式:工资>15000整行高亮
high_fill = PatternFill(start_color='FFF3E0', end_color='FFF3E0', fill_type='solid')
ws.conditional_formatting.add('A2:C6',
    FormulaRule(formula=['$C2>15000'], fill=high_fill))

print(f"条件格式规则数: {len(ws.conditional_formatting._cf_rules)}")
wb.save('cond_format_formula.xlsx')
print("公式条件格式文件已保存")

输出结果:

代码示例

条件格式规则数: 2
公式条件格式文件已保存

实际应用场景

  • 成绩管理:自动标记优秀(>=90绿色)和不及格(<60红色)学生,便于快速识别

  • 销售报表:使用数据条直观展示销量大小,一眼看出哪个产品销售最好

  • 监控报表:使用颜色渐变展示指标高低,如温度、KPI完成度、异常检测等


注意事项与类型对比

注意:条件格式的范围字符串(如'B2:B7')必须正确指定数据区域,否则规则不会生效。

注意:多个条件格式规则按添加顺序应用,后添加的优先级更高,如果多个规则同时满足,后添加的规则样式会覆盖前面的。

注意:条件格式在openpyxl中无法预览效果,需在Excel中打开查看最终渲染结果。

条件格式类型对比

类型 规则类 适用场景 特点
单元格值 CellIsRule 阈值判断 大于/小于/介于
颜色渐变 ColorScaleRule 数值分布 三色渐变
数据条 DataBarRule 数值大小 条形可视化
图标集 IconSetRule 等级划分 图标标识
公式 FormulaRule 复杂条件 自定义公式

小贴士

FormulaRule的公式语法与Excel公式一致,使用$B2的格式可以锁定列但不锁定行,这在整行高亮时非常重要。颜色值使用十六进制格式,如'2196F3',不需要加#号。


小结与练习题

小结

  • CellIsRule基于单元格值判断,支持大于、小于、介于等运算符

  • ColorScaleRule创建颜色渐变,适合展示数值分布

  • DataBarRule创建数据条,直观展示数值大小

  • FormulaRule使用Excel公式定义条件,支持复杂逻辑

练习题

练习1

创建一个成绩表,使用条件格式标记:>=90分为绿色,<60分为红色,60-89分为黄色。

练习2

创建一个温度数据表,使用三色渐变(蓝-黄-红)展示温度分布,设置中值为第50百分位。

练习3

创建一个员工表,使用公式条件格式高亮技术部的整行数据,并设置工资>15000的行为橙色背景。

常见问题

条件格式和直接设置样式有什么区别?

直接设置样式是静态的,一旦设置后不会随数据变化而改变。条件格式是动态的,会根据单元格值的变化自动应用或移除样式。条件格式更适合需要根据数据变化自动更新样式的场景。

多个条件格式规则冲突时如何处理?

多个规则按添加顺序应用,后添加的规则优先级更高。如果多个规则同时满足,后添加的规则样式会覆盖前面的样式。可以通过调整添加顺序或使用stopIfTrue=True来控制规则应用。

FormulaRule中的$符号有什么作用?

$符号用于锁定单元格引用。$B2锁定B列不锁定行,当规则应用到A2:C6时,每一行都会检查对应的B列值。如果写成B2不加$,规则应用到C列时会检查C列而非B列。

如何删除已有的条件格式规则?

可以使用ws.conditional_formatting.clear()清除所有规则。如果需要删除特定规则,可以通过ws.conditional_formatting._cf_rules列表操作,移除对应的规则对象后再保存文件。

条件格式支持的最大规则数量是多少?

Excel对条件格式规则数量没有明确的硬性限制,但建议每个区域不超过10个规则。规则过多会影响文件打开速度和性能。如果有很多条件判断,可以考虑使用FormulaRule合并多个条件。

标签: openpyxl 条件格式 颜色渐变 数据条 Excel样式 Python 数据高亮

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: openpyxl创建Excel图表详解 - 柱状图折线图饼图制作教程 下一篇: openpyxl数据验证详解 - 下拉列表输入限制与自定义公式教程

poll相关推荐