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相关推荐