条件格式专家
让数据自动变色、加图标、显示数据条。一看就懂。
"领导要的那种红绿灯效果,就是条件格式。"
When to Use
- 数据自动变色(如负数变红)
- 进度条/数据条效果
- 红绿灯/图标集
- 重复值高亮
- 用户说"怎么让数据自动变色""加个红绿灯"
When NOT to Use
- 图表可视化 → 使用
wps-chart - 公式问题 → 使用
wps-formula
常用条件格式场景
场景1:数值范围变色
需求:成绩≥90绿色,60-89正常,<60红色
openpyxl方式:
from openpyxl import load_workbook
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import PatternFill
wb = load_workbook('scores.xlsx')
ws = wb.active
red = PatternFill(start_color='FF6B6B', end_color='FF6B6B', fill_type='solid')
green = PatternFill(start_color='51CF66', end_color='51CF66', fill_type='solid')
yellow = PatternFill(start_color='FFD43B', end_color='FFD43B', fill_type='solid')
ws.conditional_formatting.add('C2:C100',
CellIsRule(operator='greaterThanOrEqual', formula=['90'], fill=green))
ws.conditional_formatting.add('C2:C100',
CellIsRule(operator='lessThan', formula=['60'], fill=red))
wb.save('scores_formatted.xlsx')
JSA宏方式:
function HighlightScores() {
var ws = Application.ActiveSheet;
var range = ws.Range("C2:C100");
range.FormatConditions.Delete(); // 清除旧规则
// >=90 绿色
var fc1 = range.FormatConditions.Add(1, 5, "90"); // xlCellValue, xlGreaterEqual
fc1.Interior.Color = 0x66CF51; // BGR绿色
// <60 红色
var fc2 = range.FormatConditions.Add(1, 6, "60"); // xlCellValue, xlLess
fc2.Interior.Color = 0x6B6BFF; // BGR红色
Application.alert("条件格式已设置!");
}
场景2:数据条(进度条效果)
from openpyxl.formatting.rule import DataBarRule
ws.conditional_formatting.add('D2:D50',
DataBarRule(start_type='min', end_type='max',
color='3498DB', showValue=True))
// JSA: 添加数据条
function AddDataBar() {
var range = Application.ActiveSheet.Range("D2:D50");
range.FormatConditions.Delete();
range.FormatConditions.AddDatabar();
var db = range.FormatConditions.Item(1);
db.BarColor.Color = 0xDB9834; // BGR蓝色
}
场景3:重复值高亮
from openpyxl.formatting.rule import FormulaRule
ws.conditional_formatting.add('A2:A100',
FormulaRule(formula=['COUNTIF($A$2:$A$100,A2)>1'],
fill=PatternFill('solid', fgColor='FFD43B')))
// JSA: 高亮重复值
function HighlightDuplicates() {
var range = Application.ActiveSheet.Range("A2:A100");
range.FormatConditions.Delete();
var fc = range.FormatConditions.AddUniqueValues();
fc.DupeUnique = 1; // xlDuplicate
fc.Interior.Color = 0x3BD4FF; // BGR黄色
}
场景4:图标集(红绿灯)
// JSA: 红绿灯图标集
function AddTrafficLights() {
var range = Application.ActiveSheet.Range("E2:E50");
range.FormatConditions.Delete();
var fc = range.FormatConditions.AddIconSetCondition();
fc.IconSet = Application.ActiveWorkbook.IconSets(1); // 红绿灯
// 自定义阈值
fc.IconCriteria(2).Value = 60;
fc.IconCriteria(3).Value = 90;
}
场景5:隔行变色(斑马纹)
from openpyxl.formatting.rule import FormulaRule
stripe = PatternFill('solid', fgColor='F0F4F8')
ws.conditional_formatting.add('A2:G100',
FormulaRule(formula=['MOD(ROW(),2)=0'], fill=stripe))
条件格式速查表
| 需求 | 类型 | 关键参数 |
|---|---|---|
| 大于/小于变色 | CellIsRule | operator + formula |
| 包含特定文字 | FormulaRule | SEARCH函数 |
| 重复值高亮 | UniqueValues | DupeUnique=1 |
| 前N名/后N名 | Top10Rule | rank + percent |
| 数据条 | DataBarRule | color |
| 色阶(渐变色) | ColorScaleRule | start/mid/end_color |
| 图标集 | IconSetCondition | IconSet类型 |
| 日期到期提醒 | FormulaRule | TODAY()比较 |
| 隔行变色 | FormulaRule | MOD(ROW(),2) |
工作流程
Step 1: 理解需求
确认要格式化的范围和条件
Step 2: 选择方案
- openpyxl → 生成新文件
- JSA宏 → 在WPS中直接运行
Step 3: 生成代码并说明
Step 4: 交付
- 提供代码(二选一或两种都给)
- 说明如何修改阈值和颜色
- 注意事项(规则优先级、性能影响)
示例
# 数值变色
/wps-conditional-format 让销售额低于目标的变红色,超过的变绿色
# 数据条
/wps-conditional-format 给完成率列加个进度条效果
# 重复值
/wps-conditional-format 帮我找出A列有哪些重复的数据