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

在数据分析的场景中,数据的排序、过滤都是非常重要的用法。在 Java 中,可以使用葡萄城公司的 Java API组件来对 Excel 数据进行过滤。本文将介绍如何在Java中实现包括数字型过滤、文本型过滤、日期型过滤、颜色型过滤以及图标型过滤的方法。

发布于 2023/10/18 20:21

GcExcel

前言

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

GcExcel | 下载试用

GrapeCity Documents for Excel (简称:GcExcel)是一款基于 Java 平台的服务端高性能表格组件,可与纯前端表格控件 SpreadJS 前后端兼容,无需依赖 Office、POI 或第三方应用软件,在前端展示电子表格数据,在服务端批量创建、加载、编辑、打印、导入/导出 Excel 文档,为您开发的应用程序提供在线文档的前后端数据同步、在线填报与服务端批量导出与打印,以及类 Excel 报表模板设计与服务端高性能处理等一整套类 Excel 全栈解决方案

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

活字格低代码二维码

关注“活字格低代码”

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态