条件样式允许您根据公式评估的条件动态更改单元格的外观。当条件满足时,指定的样式会自动应用到目标单元格。这对于数据可视化、高亮显示和警告提示非常有用。
创建条件样式规则
条件样式规则由三个组件组成:
- 公式 — 评估为
true或false的公式表达式 - 应用范围 — 应用样式的单元格范围
- 样式 — 条件为真时要应用的
WorksheetRangeStyle
var rule = new unvell.ReoGrid.ConditionalStyle.Rule(
formula: "A1>100",
applyRange: "A1:A100",
style: new WorksheetRangeStyle
{
Flag = PlainStyleFlag.FillColor | PlainStyleFlag.TextColor,
BackColor = Color.LightGreen,
TextColor = Color.DarkGreen,
}
);
规则属性
| 属性 | 类型 | 描述 |
|---|---|---|
Formula | string | 用于确定何时应用样式的公式 |
ApplyRange | RangePosition | 应用样式的单元格范围 |
Style | WorksheetRangeStyle | 条件为真时应用的样式 |
NegativeNumberStyle | WorksheetRangeStyle | 单元格值为负数时应用的样式 |
Disabled | bool | 设置为 true 以临时禁用此规则 |
构造函数重载
// 使用字符串范围地址
new Rule(string formula, string applyRange, WorksheetRangeStyle style,
WorksheetRangeStyle negativeNumberStyle = null)
// 使用 RangePosition
new Rule(string formula, RangePosition applyRange, WorksheetRangeStyle style,
WorksheetRangeStyle negativeNumberStyle = null)
向工作表添加规则
使用工作表上的 ConditionalStyles 集合来添加、移除或管理规则:
var sheet = grid.CurrentWorksheet;
// 添加规则:高亮值 > 100 的单元格
sheet.ConditionalStyles.Add(new Rule(
formula: "A1>100",
applyRange: "A1:A100",
style: new WorksheetRangeStyle
{
Flag = PlainStyleFlag.FillColor,
BackColor = Color.Yellow,
}
));
多条规则
您可以添加多条规则。它们按顺序评估,多条规则可以应用于同一单元格:
// 规则 1:值 > 80 显示绿色背景
sheet.ConditionalStyles.Add(new Rule(
formula: "B1>80",
applyRange: "B1:B50",
style: new WorksheetRangeStyle
{
Flag = PlainStyleFlag.FillColor | PlainStyleFlag.TextColor,
BackColor = Color.LightGreen,
TextColor = Color.DarkGreen,
}
));
// 规则 2:值 < 20 显示红色背景
sheet.ConditionalStyles.Add(new Rule(
formula: "B1<20",
applyRange: "B1:B50",
style: new WorksheetRangeStyle
{
Flag = PlainStyleFlag.FillColor | PlainStyleFlag.TextColor,
BackColor = Color.LightCoral,
TextColor = Color.DarkRed,
}
));
负数样式
规则可以为负数单独设置样式:
sheet.ConditionalStyles.Add(new Rule(
formula: "C1<>0",
applyRange: "C1:C100",
style: new WorksheetRangeStyle
{
Flag = PlainStyleFlag.TextColor,
TextColor = Color.Black,
},
negativeNumberStyle: new WorksheetRangeStyle
{
Flag = PlainStyleFlag.TextColor,
TextColor = Color.Red,
}
));
管理规则
移除规则
sheet.ConditionalStyles.Remove(rule);
清除所有规则
sheet.ConditionalStyles.Clear();
检查规则数量
int count = sheet.ConditionalStyles.Count;
遍历规则
foreach (var rule in sheet.ConditionalStyles)
{
Console.WriteLine($"Formula: {rule.Formula}, Range: {rule.ApplyRange}");
}
临时禁用规则
rule.Disabled = true; // 禁用
rule.Disabled = false; // 重新启用
重新应用条件样式
条件样式在单元格值变更时自动评估。如果需要手动触发重新评估(例如在批量数据更新后),请调用:
sheet.ApplyAllConditionalStyles();
挂起和恢复更新
为提升性能,您可以在批量操作期间挂起条件样式更新:
// 挂起更新
sheet.SuspendConditionalStyleUpdate = true;
// 执行批量数据操作
for (int i = 0; i < 10000; i++)
{
sheet[i, 0] = i;
}
// 恢复更新并重新应用
sheet.SuspendConditionalStyleUpdate = false;
sheet.ApplyAllConditionalStyles();
检查已应用的样式
单元格上
每个单元格都有一个 ConditionalStyles 属性,包含当前已应用的条件样式列表:
var cell = sheet.Cells["A1"];
if (cell.ConditionalStyles != null && cell.ConditionalStyles.Count > 0)
{
foreach (var style in cell.ConditionalStyles)
{
Console.WriteLine($"Applied: BackColor={style.BackColor}");
}
}
事件:条件样式单元格变更
监听受条件样式影响的单元格的变更:
sheet.ConditionalStyleCellChanged += (s, e) =>
{
Console.WriteLine("Conditional style cells were updated");
};
完整示例
以下是一个使用颜色编码规则高亮销售数据的完整示例:
var sheet = grid.CurrentWorksheet;
// 设置表头
sheet["A1"] = "Product";
sheet["B1"] = "Sales";
// 设置数据
sheet["A2:A6"] = new object[] { "Widget A", "Widget B", "Widget C", "Widget D", "Widget E" };
sheet["B2:B6"] = new object[] { 150, 45, 88, 12, 200 };
// 规则:高绩效(绿色)
sheet.ConditionalStyles.Add(new Rule(
formula: "B2>=100",
applyRange: "A2:B6",
style: new WorksheetRangeStyle
{
Flag = PlainStyleFlag.FillColor | PlainStyleFlag.FontStyleBold,
BackColor = Color.LightGreen,
Bold = true,
}
));
// 规则:低绩效(红色)
sheet.ConditionalStyles.Add(new Rule(
formula: "B2<50",
applyRange: "A2:B6",
style: new WorksheetRangeStyle
{
Flag = PlainStyleFlag.FillColor | PlainStyleFlag.TextColor,
BackColor = Color.MistyRose,
TextColor = Color.DarkRed,
}
));