C#代码实现在Excel中高亮显示最高值和最低值
在处理大量数据时,查找最高值或最低值往往既耗时又容易出错。幸运的是,Excel 提供了条件格式功能,可快速突出显示指定单元格区域中排名靠前或靠后的数值,让关键数据一目了然。本文将介绍如何通过 C# 代码在 Excel 中自动高亮显示排名最高和最低的值。
环境准备
开始之前,需要在 .NET 项目中添加用于操作 Excel 的相关程序集。你可以下载对应的 DLL 文件并手动引用,也可以直接通过 NuGet 安装所需的库。
PM> Install-Package Spire.XLS
在 C# 和 VB.NET 中高亮 Excel 中的最大值和最小值
在 Excel 中,通过条件格式可以快速突出显示数据中的最大值、最小值或前 N / 后 N 个值,便于识别关键数据。
本文将演示如何使用 C# 和 VB.NET 为 Excel 工作表设置条件格式,高亮显示排名靠前或靠后的数据。
实现步骤
- 创建
Workbook实例。 - 使用
Workbook.LoadFromFile()方法加载 Excel 文件。 - 通过
Workbook.Worksheets[sheetIndex]获取指定工作表。 - 使用
Worksheet.ConditionalFormats.Add()为工作表添加条件格式,并获取XlsConditionalFormats对象。 - 使用
XlsConditionalFormats.AddRange()指定需要应用条件格式的单元格区域。 - 调用
XlsConditionalFormats.AddTopBottomCondition(TopBottomType topBottomType, int rank)添加“前 N 个值”条件,并通过IConditionalFormat.BackColor设置满足条件单元格的背景颜色。 - 同样添加“后 N 个值”条件,并设置符合条件单元格的背景颜色。
- 使用
Workbook.SaveToFile()保存结果文件。
完整示例代码如下:
using Spire.Xls;
using Spire.Xls.Core;
using Spire.Xls.Core.Spreadsheet.Collections;
using System.Drawing;
namespace HighlightValues
{
class Program
{
static void Main(string[] args)
{
// 创建 Workbook 实例
Workbook workbook = new Workbook();
// 加载示例 Excel 文档
workbook.LoadFromFile("sample.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 添加条件格式
XlsConditionalFormats format = sheet.ConditionalFormats.Add();
// 设置条件格式应用的单元格区域
format.AddRange(sheet.Range["B2:F7"]);
// 添加“前 1 个值”条件,并设置背景颜色为红色
IConditionalFormat condition1 = format.AddTopBottomCondition(TopBottomType.Top, 1);
condition1.BackColor = Color.Red;
// 添加“后 2 个值”条件,并设置背景颜色为森林绿色
IConditionalFormat condition2 = format.AddTopBottomCondition(TopBottomType.Bottom, 2);
condition2.BackColor = Color.ForestGreen;
// 保存结果文档
workbook.SaveToFile("TopBottomValues.xlsx", ExcelVersion.Version2013);
}
}
}知识扩展
在 C# 中,使用 EPPlus 库可以方便地操作 Excel 文件。下面我会提供两种高亮方法:直接设置样式(适用于一次性标记)和条件格式(适用于数据动态变化时自动高亮)。两种方式都包含完整代码。
环境准备
首先通过 NuGet 安装 EPPlus:
Install-Package EPPlus
注意:EPPlus 5+ 需要设置许可证上下文(非商业用途可设为 LicenseContext.NonCommercial),代码中会包含此设置。
方案一:直接设置单元格背景色(静态高亮)
这种方式会直接修改单元格的 Style.Fill 属性,标记当前数据中的最大值和最小值。
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.Drawing;
using System.IO;
using System.Linq;
class Program
{
static void Main()
{
// 设置许可证(非商业用途)
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
string filePath = @"C:\Temp\Data.xlsx";
string sheetName = "Sheet1";
string rangeAddress = "A1:A100"; // 要分析的数据范围
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
var worksheet = package.Workbook.Worksheets[sheetName];
if (worksheet == null)
{
System.Console.WriteLine("工作表不存在");
return;
}
// 获取指定范围的单元格
var range = worksheet.Cells[rangeAddress];
// 读取数值(跳过非数字或空值)
var values = range
.Select(cell => cell.Value)
.Where(v => v != null && double.TryParse(v.ToString(), out _))
.Select(v => Convert.ToDouble(v))
.ToList();
if (values.Count == 0)
{
System.Console.WriteLine("未找到数字数据");
return;
}
double max = values.Max();
double min = values.Min();
// 遍历范围内的所有单元格,匹配最大值和最小值
foreach (var cell in range)
{
if (cell.Value != null && double.TryParse(cell.Value.ToString(), out double num))
{
if (num == max)
{
// 高亮最大值(绿色背景)
cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
cell.Style.Fill.BackgroundColor.SetColor(Color.LightGreen);
// 可选:设置字体颜色
cell.Style.Font.Color.SetColor(Color.DarkGreen);
}
else if (num == min)
{
// 高亮最小值(红色背景)
cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
cell.Style.Fill.BackgroundColor.SetColor(Color.LightPink);
cell.Style.Font.Color.SetColor(Color.DarkRed);
}
}
}
// 保存文件
package.Save();
System.Console.WriteLine("高亮完成!");
}
}
}说明:
- 此方法直接修改单元格样式,数据改变后需要重新运行代码。
- 如果存在多个相同的最大值/最小值,所有匹配的单元格都会被高亮。
- 颜色可根据需要自定义。
方案二:使用条件格式(动态高亮)
条件格式让 Excel 自动根据数据变化调整样式,无需再次运行代码。EPPlus 支持通过 ConditionalFormatting 添加规则。
using OfficeOpenXml;
using OfficeOpenXml.ConditionalFormatting;
using OfficeOpenXml.Style;
using System.Drawing;
using System.IO;
class Program
{
static void Main()
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
string filePath = @"C:\Temp\Data.xlsx";
string sheetName = "Sheet1";
string rangeAddress = "A1:A100";
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
var worksheet = package.Workbook.Worksheets[sheetName];
if (worksheet == null) return;
var range = worksheet.Cells[rangeAddress];
// 清除已有条件格式(可选)
worksheet.ConditionalFormatting.RemoveAll();
// 添加最大值条件格式(绿色背景)
var maxRule = worksheet.ConditionalFormatting.AddTop(worksheet.Cells[rangeAddress]);
maxRule.Priority = 1;
maxRule.StopIfTrue = false;
maxRule.Rank = 1; // 前1项(最大值)
maxRule.Style.Fill.PatternType = ExcelFillStyle.Solid;
maxRule.Style.Fill.BackgroundColor.Color = Color.LightGreen;
maxRule.Style.Font.Color.Color = Color.DarkGreen;
// 添加最小值条件格式(红色背景)
// 使用 Bottom 规则,Rank=1 表示最小值
var minRule = worksheet.ConditionalFormatting.AddBottom(worksheet.Cells[rangeAddress]);
minRule.Priority = 2;
minRule.StopIfTrue = false;
minRule.Rank = 1;
minRule.Style.Fill.PatternType = ExcelFillStyle.Solid;
minRule.Style.Fill.BackgroundColor.Color = Color.LightPink;
minRule.Style.Font.Color.Color = Color.DarkRed;
package.Save();
System.Console.WriteLine("条件格式添加完成!");
}
}
}说明:
- 条件格式会随数据更新自动生效,无需再次执行代码。
AddTop用于前 N 个最大值,AddBottom用于前 N 个最小值。- 可以通过
Rank控制数量(例如Rank=3表示前 3 个最大值)。 - 优先级
Priority数字越小越优先(如果规则冲突)。
两种方案对比
| 特点 | 直接设置样式 | 条件格式 |
|---|---|---|
| 动态更新 | ❌ 需重新运行代码 | ✅ 自动跟随数据变化 |
| 适用场景 | 一次性报表 | 模板文件或实时数据 |
| 代码复杂度 | 简单 | 稍微复杂 |
| 保留其他样式 | 可能覆盖已有样式 | 不影响其他样式 |
总结
本文介绍了如何在 C# 和 VB.NET 中使用条件格式高亮显示 Excel 工作表中的最大值和最小值。通过为指定单元格区域添加条件格式,可以快速突出显示排名前 N 或后 N 的数据,提高数据分析和可视化效果。示例中演示了如何加载 Excel 文件、设置条件格式的应用区域、分别添加“前 N 个值”和“后 N 个值”条件,并为符合条件的单元格设置不同的背景颜色,最后将处理后的结果保存为新的 Excel 文件。
到此这篇关于C#代码实现在Excel中高亮显示最高值和最低值的文章就介绍到这了,更多相关C# Excel高亮显示内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论
在本篇文章里小编给大家整理的是关于C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论,有需要的朋友们学习下。2019-11-11


最新评论