C# 在Excel中添加自动筛选器并执行筛选
当Excel工作表中的数据十分庞大时,我们可以在某个选定的区域内添加“文本筛选器”、“数字筛选器”、“颜色筛选器”和“日期筛选器”等,对数据进行过滤。过滤后的工作表会显示所需数据并隐藏其余数据。
如下所示的工作表中,我们可以在“种类”所在的列添加文本筛选器,使工作表只显示一类的数据;我们可以在“数量”列添加数字筛选器,让工作表只显示80-100之间的数字所在的行;表中偶数行有背景色,我们可以添加颜色筛选器,来显示带有背景色的数据;我们还可以在“日期”列添加日期筛选器,来显示某个月份的数据。
下面的代码将分别演示这几种筛选器的添加方法。本方案需要引用Spire.Xls.dll,在编写代码前,请下载DLL文件并添加到程序。
1. 添加文本筛选器
//创建Workbook对象
Workbook wb = new Workbook();
//加载Excel文件
wb.LoadFromFile(@"C:\Users\Administrator\Desktop\data-filter.xlsx");
//获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];
//获取AutoFilters对象
AutoFiltersCollection filters = sheet.AutoFilters;
//设置需要筛选的单元格区域
filters.Range = sheet.Range[2, 2, 16, 5];
//在所选区域的第二列添加筛选器,并设置过滤准则,即文本“C”
filters.AddFilter(1, "C");
//执行过滤
filters.Filter();
//保存文档
wb.SaveToFile("output.xlsx", ExcelVersion.Version2013);
结果:
2. 添加数字筛选器
//创建Workbook对象
Workbook wb = new Workbook();
//加载Excel文件
wb.LoadFromFile(@"C:\Users\Administrator\Desktop\data-filter.xlsx");
//获取第一个工作表
Worksheet sheet = wb.Worksheets[0];
//获取AutoFilters对象
AutoFiltersCollection filters = sheet.AutoFilters;
//设置需要筛选的单元格区域
filters.Range = sheet.Range[2, 2, 16, 5];
//在所选区域的第三列添加自定义的筛选器,即“大于等于80,小于等于100”直接的数字
filters.CustomFilter(2, FilterOperatorType.GreaterOrEqual, 80, true, FilterOperatorType.LessOrEqual, 100);
//执行过滤
filters.Filter();
//保存文档
wb.SaveToFile("output.xlsx", FileFormat.Version2013);
结果:
3. 添加颜色筛选器
//创建Workbook对象
Workbook wb = new Workbook();
//加载Excel文件
wb.LoadFromFile(@"C:\Users\Administrator\Desktop\data-filter.xlsx");
//获取第一个工作表
Worksheet sheet = wb.Worksheets[0];
//获取AutoFilters对象
AutoFiltersCollection filters = sheet.AutoFilters;
//设置需要筛选的单元格区域
filters.Range = sheet.Range[2, 2, 16, 5];
//在所选区域的第一列添加颜色筛选器,选择的颜色了单元格B4的背景色
filters.AddFillColorFilter(0, sheet.Range["B4"].Style.Color);
//执行过滤
filters.Filter();
//保存文档
wb.SaveToFile("output.xlsx", ExcelVersion.Version2013);
结果:
4. 添加日期筛选器
//创建Workbook对象
Workbook wb = new Workbook();
//加载Excel文件
wb.LoadFromFile(@"C:\Users\Administrator\Desktop\data-filter.xlsx");
//获取第一个工作表
Worksheet sheet = wb.Worksheets[0];
//获取AutoFilters对象
AutoFiltersCollection filters = sheet.AutoFilters;
//设置需要筛选的单元格区域
filters.Range = sheet.Range[2, 2, 16, 5];
//在所选区域的第四列添加日期筛选器,以“2017年4月”作为筛选条件
filters.AddDateFilter(3, DateTimeGroupingType.Month, 2017, 4, 1, 0, 0, 0 );
//执行过滤
filters.Filter();
//保存文档
wb.SaveToFile("output.xlsx", ExcelVersion.Version2013);
结果: