[]
在使用表单时,快速、高效地分析、操作和管理大量数据往往变得非常困难。
应用过滤不仅可以帮助您查看必要的信息,还可以隐藏其余的数据。在工作表上设置特定过滤条件时,只有最相关的记录(行)才会在特定列中显示与特定条件匹配的记录。
在GcExcel Java中,过滤可以应用于选定的数据范围。例如,可以应用范围从D3到I6的数字过滤,以仅显示列包含数字数据的行。
在工作表中执行不同的过滤操作时,可以使用多种类型的区域过滤器。
GcExcel允许您使用IRange.AutoFilter创建无条件的过滤。如果工作表中没有设置任何筛选条件,该方法将创建一个空的筛选。您还可以通过传参的方式为特定字段创建筛选器。

//Create filters without condition
worksheet.getRange("A1:F7").autoFilter(); 要应用数字过滤器,在包含数字数据的列上显示符合指定条件集的数据,请参阅以下代码示例。
// Apply number filter
worksheet.getRange("D3:I6").autoFilter(0, "<>2");要应用多选筛选器来基于多个选择过滤单元格值的数据,请参考以下示例代码。
// Apply filter condition - multi select
worksheet.getRange("A1:E5").autoFilter(0, new Object[] { "$2", "$4" }, AutoFilterOperator.Values);要应用文本筛选器以显示单元格值与指定的文本或正则表达式值匹配的行,则可参考以下示例代码。
// Apply filter condition - begin with "a".
worksheet.getRange("D3:I9").autoFilter(1, "a*");要将日期筛选器应用于一系列单元格,仅显示落在特定日期范围内的结果,请参考以下示例代码。
// Apply filter using Date criteria
String criteria1 = new GregorianCalendar(1972, 6, 3).getTime().toString();
String criteria2 = new GregorianCalendar(1993, 1, 15).getTime().toString();
// Filter date between 1972.7.3 and 1993.2.15
worksheet.getRange("A1:F7").autoFilter(2, ">=" + criteria1, AutoFilterOperator.And, "<=" + criteria2);要应用动态日期过滤器,根据每天自动更新的当前系统日期显示符合指定日期条件的结果,请参阅以下代码示例。
// Apply filter condition - filter by yesterday
worksheet.getRange("D7:F18").autoFilter(2, DynamicFilterType.Yesterday, AutoFilterOperator.Dynamic);要在显示具有不同填充阴影的单元格的结果的列上应用按单元格颜色的过滤器,请参阅以下代码示例。
// Apply filter by cell color
worksheet.getRange("A1:A6").autoFilter(0, Color.FromArgb(255, 255, 0), AutoFilterOperator.CellColor);要对列应用不填充过滤器,以便根据没有填充颜色的单元格过滤结果,请参阅以下代码示例。
// Apply filter by no fill
worksheet.getRange("A1:A6").autoFilter(0, null, AutoFilterOperator.NoFill);要应用通过单元格中具有特定图标过滤结果的按图标过滤,请参阅以下示例代码。
// Apply filter by icon
worksheet.getRange("A1:A10").autoFilter(0, workbook.getIconSets().get(IconSetType.Icon5ArrowsGray).get(0),AutoFilterOperator.Icon);要在单元格没有图标的情况下应用显示结果的无图标过滤器,请参阅以下示例代码。
// Apply filter by no icon
worksheet.getRange("A2:A10").autoFilter(0, null, AutoFilterOperator.NoIcon);如果要在移除过滤的话,请参阅如下示例代码
worksheet.setAutoFilterMode(false);GcExcel 允许您通过 IRange 接口的 autoFilter 方法重载,在包含数据的首行上方添加筛选功能。该方法包含一个 isFirstRowData 布尔类型参数,借助此参数,您可以对首行进行筛选。
请参考以下示例代码,通过 autoFilter 方法的 isFirstRowData 参数为包含数据的首行添加筛选:
// 创建一个新的工作簿
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);
// 向单元格区域中添加数据
Object data = new Object[][]{
{"Luigi", "纽约", new GregorianCalendar(1998, Calendar.APRIL, 8), "蓝色", 67, 165},
{"Richard", "纽约", new GregorianCalendar(1968, Calendar.JUNE, 8), "蓝色", 67, 165},
{"Nia", "纽约", new GregorianCalendar(1972, Calendar.JULY, 3), "棕色", 62, 134},
{"Jared", "纽约", new GregorianCalendar(1964, Calendar.MARCH, 2), "淡褐色", 72, 180},
{"Natalie", "华盛顿", new GregorianCalendar(1972, Calendar.AUGUST, 8), "蓝色", 66, 163},
{"Damon", "华盛顿", new GregorianCalendar(1986, Calendar.FEBRUARY, 2), "淡褐色", 76, 176},
{"Angela", "华盛顿", new GregorianCalendar(1993, Calendar.FEBRUARY, 15), "棕色", 68, 145}
};
worksheet.getRange("A1:F7").setValue(data);
// 设置列宽
worksheet.getRange("A:F").setColumnWidth(15);
// 对首行应用筛选(参数true表示首行为数据,筛选第5列中值小于72的内容)
worksheet.getRange("A1:F7").autoFilter(true, 4, "<72");
// 创建文件流,用于导出ssjson格式文件
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream("HeadersAsData.ssjson");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 导出ssjson格式文件
workbook.toJson(outputStream);
// 关闭文件流
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}注意:仅当工作簿导出为 .sjs 和 ssjson 格式文件时,isFirstRowData 参数才会生效,因为 Excel 本身不支持此功能。