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

首先,在 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 的测试文件,您可根据实际情况调整路径。
最简单的场景是,在指定列(或行)上启用自动筛选器,让用户后续在 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属性决定了筛选作用域,一般只需选中表头单元格,筛选器便会自动覆盖该列的所有数据行。保存后的文件打开时,您会看到每列头部出现筛选按钮,点击即可按需筛选。
更常见的需求是,根据日期字段筛选出特定月份、季度或年份的数据。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枚举支持Year、Quarter、Month、Day、Hour、Minute、Second等,您可根据业务需要组合使用。例如,筛选 2022 年第一季度,可将类型设为Quarter,年份为 2022,季度参数为 1。
补充说明 :上述示例以日期分组(AddDateFilter)为演示,但 AutoFilters 对象还提供了其他多种内置筛选方式,方便您根据不同业务场景灵活选用:
AddFillColorFilter 方法,可筛选出具有特定背景色的单元格所在行。AddFontColorFilter 方法,可按单元格字体颜色进行过滤。AddIconFilter 方法,可筛选出条件格式中指定图标(如红黄绿灯、箭头等)对应的行。这些方法与 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);
}
}
}
}除了 Equal,FilterOperatorType 还提供了 LessThan、GreaterThan、Contains、BeginsWith、EndsWith 等丰富选项,足以应对大部分模糊匹配需求。若要组合多个条件(如“包含 A 或 B”),可多次调用 CustomFilter 并配合逻辑运算符。
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data.xlsx")。Workbook.LoadFromFile(fileName, ExcelOpenType.Automatic) 以优化内存。sheet.Rows 并检查 IsHidden 属性,从而进一步处理可见行。Filter() 即可。sheet.AutoFilters.Clear() 并重新保存。通过 Free Spire.XLS for .NET,我们仅用寥寥数行 C# 代码即可为 Excel 赋予强大的自动筛选能力。无论是启用基础的列筛选器,还是利用内置日期分组或自定义文本匹配,该组件都提供了直观的 API 和稳定的性能。本文三个示例覆盖了最常见的筛选场景,您可根据实际数据特征灵活组合。最后,别忘了将生成的 Excel 文件分享给同事或下游系统,让数据洞察变得更加高效。
如果您希望进一步探索,还可以研究 AutoFilters 下的其他方法,如 AddDynamicFilter(动态筛选前 N 项)或 AddColorFilter(按单元格颜色筛选)。掌握这些技巧,您的 Excel 自动化工具箱将更加完备。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。