本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
前言
在数据分析的场景中,数据的排序、过滤都是非常重要的用法。在 Java 中,可以使用葡萄城公司的 Java API组件——GrapeCity Documents for Excel(以下简称GcExcel)来对 Excel 数据进行过滤。
GcExcel 支持以下几种数据过滤方式:
下面小编将依次为大家详细介绍如何在Java中实现上述几种过滤方法。
使用GcExcel实现数据过滤
在 GcExcel 中,添加过滤非常简单,与 Excel 的概念相同,只需要通过 Range,启用 autofiler 即可。对于不同类型的过滤,可以通过 AutoFilterOperator 来控制。
1.添加测试数据
为了直观,我们先添加一些测试数据,用于不同的过滤。
代码如下,接收一个 workbook 的对象,并且在 A1:F7 设置测试数据。
private void filterExampleData(Workbook wb) {
IWorksheet sheet = wb.getWorksheets().get(0);
Object data = new Object[][]{
{"Name", "City", "Birthday", "Eye color", "Weight", "Height"},
{"Richard", "New York", new GregorianCalendar(1968, 5, 8), "Blue", 67, 165},
{"Nia", "New York", new GregorianCalendar(1972, 6, 3), "Brown", 62, 134},
{"Jared", "New York", new GregorianCalendar(1964, 2, 2), "Hazel", 72, 180},
{"Natalie", "Washington", new GregorianCalendar(1972, 7, 8), "Blue", 66, 163},
{"Damon", "Washington", new GregorianCalendar(1986, 1, 2), "Hazel", 76, 176},
{"Angela", "Washington", new GregorianCalendar(1993, 1, 15), "Brown", 68, 145}
};
sheet.getRange("A1:F7").setValue(data);
sheet.getRange("A:F").setColumnWidth(15);
}
2.添加过滤条件
(1)无条件过滤
public void addAutoFilter() {
Workbook wb = new Workbook();
filterExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
sheet.getRange("A1:F7").autoFilter();
wb.save("output/emptyFilter.xlsx");
}
结果如下:
可以看到,每一列都有过滤的下拉按钮,但是数据没有变化,与测试数据一致。
(2)数字型过滤
public void addNumberFilter() {
Workbook wb = new Workbook();
filterExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
sheet.getRange("A1:F7").autoFilter(4, "<72");
wb.save("output/numberFilter.xlsx");
}
结果如下:
可以看到 Weight 列被过滤,条件为小于 72 的结果。在上面的代码中,要注意 autoFilter(4, “<72”);中的 4 指的是第 5 列,GcExcel 是从 0 开始计算的。
(3)文本型过滤
public void addTextFilter() {
Workbook wb = new Workbook();
filterExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
sheet.getRange("A1:F7").autoFilter(0, "*e*");
wb.save("output/textFilter.xlsx");
}
结果如下:
(4)日期型过滤
public void addDateFilter() {
Workbook wb = new Workbook();
filterExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
sheet.getRange("A1:F7").autoFilter(2, DynamicFilterType.M2, AutoFilterOperator.Dynamic);
wb.save("output/dateFilter.xlsx");
}
结果如下:
可以看到,第 3 列被过滤,条件如下图。
(5)颜色型过滤
因为测试数据中不带颜色,因此我们添加了一些代码给 E2, E5, E6 添加了颜色。
public void addCellColorFilter() {
Workbook wb = new Workbook();
filterExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
sheet.getRange("E2").getInterior().setColor(Color.GetGreen());
sheet.getRange("E5").getInterior().setColor(Color.GetGreen());
sheet.getRange("E6").getInterior().setColor(Color.GetRed());
sheet.getRange("A1:F7").autoFilter(4, Color.GetGreen(), AutoFilterOperator.CellColor);
wb.save("output/colorFilter.xlsx");
}
结果如下:
上面的代码,在 E 列设置了一些颜色,然后按照绿色进行过滤。
(6)图标型过滤
与按颜色过滤同理,测试数据中不包含图标,需要添加一些图标。
public void addIconFilter(){
Workbook wb = new Workbook();
filterExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
IIconSetCondition iconset = sheet.getRange("E2:E7").getFormatConditions().addIconSetCondition();
iconset.setIconSet(wb.getIconSets().get(IconSetType.Icon3TrafficLights1));
sheet.getRange("A1:F7").autoFilter(4,
wb.getIconSets().get(IconSetType.Icon3TrafficLights1).get(2), AutoFilterOperator.Icon);
wb.save("output/iconFilter.xlsx");
}
结果如下:
3.修改过滤
对于已经设置过滤的 Excel 文件也可以通过 GcExcel 修改,一个 sheet 上,只能设置一个 autofilter。通过 setAutoFilterMode,隐藏之前 autofilter 之后,可以重新配置新的 autofilter。
public void editFilter() {
Workbook wb = new Workbook();
filterExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
sheet.getRange("A1:F7").autoFilter();
sheet.setAutoFilterMode(false);
sheet.getRange("A1:E7").autoFilter();
wb.save("output/editFilter.xlsx");
}
结果如下:
可以看到,F 列的 filter 被取消掉了。
4.清除过滤
通过 sheet 上的 showAllData,就可以清除过滤。
public void clearFilter() {
Workbook wb = new Workbook();
filterExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
sheet.getRange("A1:F7").autoFilter(4, "<72");
sheet.showAllData();
wb.save("output/clearFilter.xlsx");
}
结果如下:
总结
以上就是在 Java 中对数据进行过滤的基本用法,如果您想了解更多信息,可以参考这篇帮助手册和在线demo,无论是初学者还是有经验的专业人士,该帮助手册都将为您提供有价值的指导和帮助。
扩展链接: