C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# Excel添加自动筛选器

C#代码实现给Excel添加自动筛选器(日期/颜色/文本全覆盖)

作者:秋天的落叶铺满小路

本文详细介绍了如何使用FreeSpire.XLSfor.NET在C#中实现Excel的自动筛选功能,涵盖基础范围筛选、内置日期筛选及自定义文本匹配筛选,并提供实用代码示例及注意事项,助您高效处理数据

在数据处理与分析工作中,Excel 的自动筛选功能堪称提升效率的利器——它能快速从海量数据中定位所需子集,而无需编写复杂公式。如果您是一名 .NET 开发者,希望以编程方式为 Excel 文件动态添加筛选器,那么 Free Spire.XLS for .NET 将是一个轻量、免费且功能完备的选择。本文将循序渐进地演示如何使用 C# 和该组件,实现三种常用的自动筛选场景:基础范围筛选、按日期分组筛选和自定义文本匹配筛选。所有代码均经过规范化处理,可直接复用。

准备工作:安装 Free Spire.XLS

首先,在 Visual Studio 中创建一个控制台应用程序(.NET Framework 或 .NET Core/.NET 5+ 均可)。通过 NuGet 包管理器安装 Free Spire.XLS:

Install-Package FreeSpire.XLS

或通过 .NET CLI:

dotnet add package FreeSpire.XLS

该库提供了对 Excel 97-2016 格式的完整读写支持,且无需安装 Microsoft Office。本文示例将基于一份名为 Data.xlsx 的测试文件,您可根据实际情况调整路径。

1. 基础自动筛选:设定筛选范围

最简单的场景是,在指定列(或行)上启用自动筛选器,让用户后续在 Excel 中手动选择条件。以下代码加载工作簿,获取第一个工作表,并将自动筛选范围设置为表头所在行(例如 A1:C1),从而为该区域的每一列添加下拉箭头。

using Spire.Xls;
namespace AddAutoFilterDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 初始化 Workbook 并加载 Excel 文件
            using (Workbook workbook = new Workbook())
            {
                workbook.LoadFromFile(@"C:\Data\Data.xlsx");
                // 2. 获取第一个工作表
                Worksheet sheet = workbook.Worksheets[0];
                // 3. 设置自动筛选范围(通常为表头行)
                sheet.AutoFilters.Range = sheet.Range["A1:C1"];
                // 4. 保存结果(格式可指定 Excel 2016 版本)
                workbook.SaveToFile("AutoFilter_Base.xlsx", ExcelVersion.Version2016);
            }
        }
    }
}

说明 :AutoFilters.Range 属性决定了筛选作用域,一般只需选中表头单元格,筛选器便会自动覆盖该列的所有数据行。保存后的文件打开时,您会看到每列头部出现筛选按钮,点击即可按需筛选。

2. 内置日期筛选:按年月日分组

更常见的需求是,根据日期字段筛选出特定月份、季度或年份的数据。Free Spire.XLS 提供了 AddDateFilter 方法,允许按年、月、日、小时、分钟等粒度进行分组过滤。例如,以下代码筛选出 2022 年 2 月 的所有记录:

using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.AutoFilter;
namespace AddAutoFilterDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            using (Workbook workbook = new Workbook())
            {
                workbook.LoadFromFile(@"C:\Data\Data.xlsx");
                Worksheet sheet = workbook.Worksheets[0];
                // 设置筛选范围为 A1:A12(假设 A 列包含日期)
                sheet.AutoFilters.Range = sheet.Range["A1:A12"];
                // 获取待筛选的列(索引 0 表示第一列)
                IAutoFilter filterColumn = sheet.AutoFilters[0];
                // 添加日期分组:2022 年 2 月
                sheet.AutoFilters.AddDateFilter(
                    filterColumn,
                    DateTimeGroupingType.Month,  // 按月份分组
                    2022,                        // 年份
                    2,                           // 月份
                    0, 0, 0, 0                  // 日、时、分、秒(此处不使用)
                );
                // 应用筛选
                sheet.AutoFilters.Filter();
                workbook.SaveToFile("AutoFilter_Date.xlsx", ExcelVersion.Version2016);
            }
        }
    }
}

要点 :DateTimeGroupingType 枚举支持 YearQuarterMonthDayHourMinuteSecond 等,您可根据业务需要组合使用。例如,筛选 2022 年第一季度,可将类型设为 Quarter,年份为 2022,季度参数为 1。

补充说明 :上述示例以日期分组(AddDateFilter)为演示,但 AutoFilters 对象还提供了其他多种内置筛选方式,方便您根据不同业务场景灵活选用:

这些方法与 AddDateFilter 用法类似,均需先指定筛选列,再传入颜色或图标参数,最后调用 Filter() 应用。您可根据实际数据类型自由组合,实现高度定制化的筛选逻辑。本文以日期为例仅为说明用法,实际开发中请勿局限于日期分组。

3. 自定义筛选:匹配特定文本或数值

有时我们需要筛选出包含指定字符串(或等于某数值)的行,这时可以使用 CustomFilter 方法。以下示例筛选 G 列中值为 “Grocery” 的所有行(适用于文本精确匹配):

using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.AutoFilter;
namespace AddAutoFilterDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            using (Workbook workbook = new Workbook())
            {
                workbook.LoadFromFile(@"C:\Data\Data.xlsx");
                Worksheet sheet = workbook.Worksheets[0];
                // 筛选范围为 G1:G12
                sheet.AutoFilters.Range = sheet.Range["G1:G12"];
                // 获取列对象(需显式转换为 FilterColumn)
                FilterColumn filterColumn = (FilterColumn)sheet.AutoFilters[0];
                // 添加自定义筛选条件:等于 "Grocery"
                sheet.AutoFilters.CustomFilter(
                    filterColumn,
                    FilterOperatorType.Equal,    // 等于操作符
                    "Grocery"                    // 比较值
                );
                // 应用筛选
                sheet.AutoFilters.Filter();
                workbook.SaveToFile("AutoFilter_Custom.xlsx", ExcelVersion.Version2016);
            }
        }
    }
}

除了 EqualFilterOperatorType 还提供了 LessThanGreaterThanContainsBeginsWithEndsWith 等丰富选项,足以应对大部分模糊匹配需求。若要组合多个条件(如“包含 A 或 B”),可多次调用 CustomFilter 并配合逻辑运算符。

进阶技巧与注意事项

总结

通过 Free Spire.XLS for .NET,我们仅用寥寥数行 C# 代码即可为 Excel 赋予强大的自动筛选能力。无论是启用基础的列筛选器,还是利用内置日期分组或自定义文本匹配,该组件都提供了直观的 API 和稳定的性能。本文三个示例覆盖了最常见的筛选场景,您可根据实际数据特征灵活组合。最后,别忘了将生成的 Excel 文件分享给同事或下游系统,让数据洞察变得更加高效。

如果您希望进一步探索,还可以研究 AutoFilters 下的其他方法,如 AddDynamicFilter(动态筛选前 N 项)或 AddColorFilter(按单元格颜色筛选)。掌握这些技巧,您的 Excel 自动化工具箱将更加完备。

以上就是C#代码实现给Excel添加自动筛选器(日期/颜色/文本全覆盖)的详细内容,更多关于C# Excel添加自动筛选器的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文