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运算符选项
ColorScaleRule参数说明
DataBarRule参数说明
返回值说明
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中打开查看最终渲染结果。
条件格式类型对比
小贴士
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合并多个条件。
本文涉及AI创作
内容由AI创作,请仔细甄别