提升数据处理能力:掌握Java中对Excel数据进行过滤的方法

原创
2023/11/09 09:08
阅读数 29

本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

前言

在数据分析的场景中,数据的排序、过滤都是非常重要的用法。在 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,无论是初学者还是有经验的专业人士,该帮助手册都将为您提供有价值的指导和帮助。

扩展链接:

从表单驱动到模型驱动,解读低代码开发平台的发展趋势

低代码开发平台是什么?

基于分支的版本管理,帮助低代码从项目交付走向定制化产品开发

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部