C#代码实现在Excel中高亮显示最高值和最低值

 更新时间:2026年06月23日 09:39:00   作者:2501_93070778  
本文介绍了如何在 C# 和 VB.NET 中使用条件格式高亮显示 Excel 工作表中的最大值和最小值,通过为指定单元格区域添加条件格式,可以快速突出显示排名前 N 或后 N 的数据,希望对大家有所帮助

在处理大量数据时,查找最高值或最低值往往既耗时又容易出错。幸运的是,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#中try...catch的使用与常见面试题分享

    C#中try...catch的使用与常见面试题分享

    这篇文章首先给大家介绍了关于C#中try...catch的语法,而后又给大家分享了关于C#中try...catch最常见的面试题,具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。
    2017-02-02
  • C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论

    C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论

    在本篇文章里小编给大家整理的是关于C#中将xml文件反序列化为实例时采用基类还是派生类的知识点讨论,有需要的朋友们学习下。
    2019-11-11
  • C#实现读取txt文件生成Word文档

    C#实现读取txt文件生成Word文档

    大家好,本篇文章主要讲的是C#实现读取txt文件生成Word文档,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C#实现微信公众号会员卡管理的示例代码

    C#实现微信公众号会员卡管理的示例代码

    这篇文章主要介绍了C#实现微信公众号会员卡管理的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 详解如何在C#中处理空值

    详解如何在C#中处理空值

    在任何编程语言中开发应用程序时,经常会遇到空异常或空引用异常,那么下面让我们探讨一下在C#中处理空值的各种方法吧,需要的可以收藏下
    2023-07-07
  • C#实现BBcode转为Markdown的方法

    C#实现BBcode转为Markdown的方法

    这篇文章主要给大家介绍了关于C#实现BBcode转Markdown的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • C#实现将超大图片(1GB)裁剪为8张小图片

    C#实现将超大图片(1GB)裁剪为8张小图片

    C#处理超大图片(1GB)需要特别注意内存管理和性能优化,这篇文章为大家整理了4种常见的处理方法,并进行了对比,大家可以根据自己的需要进行选择
    2025-05-05
  • C#对NULL的简化赋值的方法总结

    C#对NULL的简化赋值的方法总结

    在C#中,对null赋值意味着将引用类型的变量设置为无引用或者说空引用,当你声明一个引用类型的变量,如果没有给它初始化具体的对象,那么它的值就是null,本文给大家介绍了C#对NULL的简化赋值的方法总结,需要的朋友可以参考下
    2024-11-11
  • BCrypt.Net 使用详细教程

    BCrypt.Net 使用详细教程

    本文主要介绍了BCrypt.Net 使用详细教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-06-06
  • Win Form 的 Splitter 使用心得与技巧

    Win Form 的 Splitter 使用心得与技巧

    Win Form 的 Splitter 使用心得与技巧...
    2007-04-04

最新评论