You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ClosedXml在Excel中实现HeatMap/Conditional formatting

ClosedXML实现Excel热力图与条件格式方案

你需要的热力图效果本质是Excel原生的三色色阶条件格式,ClosedXML已原生封装了对应API,无需额外依赖,可直接生成和Excel手动配置完全一致的效果。

核心实现思路

  • 热力图的渲染逻辑完全交给Excel的条件格式引擎处理:给指定数据范围配置色阶规则后,Excel会自动根据单元格数值在阈值区间的占比,插值计算对应填充色,后续修改单元格数值时颜色会自动更新。
  • 除色阶热力图外,ClosedXML还支持所有Excel自带的条件格式能力,包括数据条、图标集、值匹配高亮、自定义公式规则等。

前置准备

通过NuGet安装最新稳定版ClosedXML包即可,无需其他第三方组件。

可直接复用的代码示例

using ClosedXML.Excel;

// 初始化工作簿与工作表
using var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("数据页");

// 定义需要添加热力图的数据范围,替换为你实际的业务数据区域即可
var dataRange = worksheet.Range("B2:K11");

// 示例:向数据范围写入测试数据,实际使用时替换为你的业务数据写入逻辑
var random = new Random();
dataRange.Cells().ForEach(cell => cell.Value = random.Next(0, 100));

// 为数据范围添加三色色阶规则(即标准热力图效果)
var heatmapRule = dataRange.AddConditionalFormat().ColorScale();
// 配置最小值规则:区域内最小值填充深蓝色
heatmapRule.MinimumPoint.ConditionalFormatType = XLConditionalFormatType.Minimum;
heatmapRule.MinimumPoint.Color = XLColor.FromHtml("#163A65");
// 配置中间值规则:区域内50百分位值填充白色作为过渡
heatmapRule.Midpoint.ConditionalFormatType = XLConditionalFormatType.Percentile;
heatmapRule.Midpoint.Value = 50;
heatmapRule.Midpoint.Color = XLColor.White;
// 配置最大值规则:区域内最大值填充深红色
heatmapRule.MaximumPoint.ConditionalFormatType = XLConditionalFormatType.Maximum;
heatmapRule.MaximumPoint.Color = XLColor.FromHtml("#992426");

// 可选:配置单元格基础样式对齐常规报表效果
dataRange.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
dataRange.Style.Border.InsideBorder = XLBorderStyleValues.Thin;
dataRange.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
dataRange.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
dataRange.Style.NumberFormat.Format = "0";

// 保存生成的Excel文件
workbook.SaveAs("带热力图的报表.xlsx");

注意:不要通过遍历单元格手动计算占比、给单元格设置固定背景色的方式模拟热力图。这种方式生成的是静态样式,不具备条件格式的动态更新能力,数据量大时性能也远差于原生条件格式规则。

自定义调整说明

  • 若需要两色阶热力图,直接删除代码中Midpoint相关的配置项即可,API会自动按双色规则生成颜色插值逻辑。
  • 阈值类型可按需替换:除示例中使用的最小值/最大值、百分位外,还支持固定数值(XLConditionalFormatType.Number)、百分比(XLConditionalFormatType.Percent)、自定义公式(XLConditionalFormatType.Formula),给对应节点的Value属性赋值即可设置阈值。
  • 色值可根据需求自由调整,替换FromHtml()方法内的十六进制色码,即可匹配你需要的视觉效果。
  • 其他类型的条件格式可通过dataRange.AddConditionalFormat()下的对应方法实现,包括数据条DataBar()、图标集IconSet()、值高亮规则(如WhenGreaterThan()、WhenContainsText()等),调用逻辑和色阶规则一致。

内容的提问来源于stack exchange,提问作者Orn Kristjansson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:45:31