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

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

前言

在数据分析的场景中,数据的排序、过滤都是非常重要的用法。在 Java 中,可以使用葡萄城公司的 Java API组件------GrapeCity Documents for Excel(以下简称GcExcel)来对 Excel 数据进行过滤。

GcExcel 支持以下几种数据过滤方式:

  • 数字型过滤
  • 文本型过滤
  • 日期型过滤
  • 颜色型过滤
  • 图标型过滤

下面小编将依次为大家详细介绍如何在Java中实现上述几种过滤方法。

使用GcExcel实现数据过滤

在 GcExcel 中,添加过滤非常简单,与 Excel 的概念相同,只需要通过 Range,启用 autofiler 即可。对于不同类型的过滤,可以通过 AutoFilterOperator 来控制。

1.添加测试数据

为了直观,我们先添加一些测试数据,用于不同的过滤。

代码如下,接收一个 workbook 的对象,并且在 A1:F7 设置测试数据。

Java 复制代码
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) 无条件过滤

Java 复制代码
public void addAutoFilter() {
    Workbook wb = new Workbook();
    filterExampleData(wb);
    IWorksheet sheet = wb.getActiveSheet();

    sheet.getRange("A1:F7").autoFilter();
    wb.save("output/emptyFilter.xlsx");
}

结果如下:

可以看到,每一列都有过滤的下拉按钮,但是数据没有变化,与测试数据一致。

(2) 数字型过滤

Java 复制代码
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) 文本型过滤

Java 复制代码
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) 日期型过滤

Java 复制代码
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 添加了颜色。

Java 复制代码
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) 图标型过滤

与按颜色过滤同理,测试数据中不包含图标,需要添加一些图标。

Java 复制代码
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。

Java 复制代码
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,就可以清除过滤。

Java 复制代码
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,无论是初学者还是有经验的专业人士,该帮助手册都将为您提供有价值的指导和帮助。

扩展链接:

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

低代码开发平台是什么?

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

相关推荐
追逐时光者4 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_4 小时前
敏捷开发流程-精简版
前端·后端
苏打水com4 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧5 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧5 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧5 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧5 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧6 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng7 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端
烙印6017 小时前
Spring容器的心脏:深度解析refresh()方法(上)
java·后端·spring