数据重整:用Java实现精准Excel数据排序的实用策略
摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
前言
在数据处理或者数据分析的场景中,需要对已有的数据进行排序,在Excel中可以通过排序功能进行整理数据。而在Java中,则可以借助Excel表格插件对数据进行批量排序,下面是一些常见的数据排序方法:
- 按值排序
- 按图标排序
- 按字体颜色排序
- 按背景色排序
- 根据自定义序列排序
下面小编将为大家介绍如何使用Java分别实现上述的Excel数据排序。
样例数据
为了方便展示,先准备一些样例数据,用于排序,定义一个方法,传入workbook,在上面添加如下数据。
private void SetExampleData(Workbook wb) {
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}
};
IWorksheet sheet = wb.getWorksheets().get(0);
sheet.getRange("A1:F7").setValue(data);
sheet.getRange("A:F").setColumnWidth(15);
wb.save("output/sampleData.xlsx");
}
样例数据如下所示:

1. 按值排序
按值排序是指根据单元格值按特定顺序排列数据的排序操作。setOrientation方法用于指定排序的方向类别,即列或行。
public void SortByValue() {
Workbook wb = new Workbook();
SetExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
//对F列做升序排序.
sheet.getRange("A2:F7").sort(sheet.getRange("F2:F7"), SortOrder.Ascending, SortOrientation.Columns);
wb.save("output/sortByValue.xlsx");
}
实现效果如下图所示:

2. 按图标排序
按图标排序是指基于单元格的条件格式图标执行的排序操作。
public void SortByIcon() {
Workbook wb = new Workbook();
SetExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
IIconSetCondition iconset = sheet.getRange("F2:F27").getFormatConditions().addIconSetCondition();
iconset.setIconSet(wb.getIconSets().get(IconSetType.Icon3TrafficLights1));
sheet.getSort().getSortFields().add(new IconSortField(sheet.getRange("F2:F7"),
wb.getIconSets().get(IconSetType.Icon3TrafficLights1).get(2), SortOrder.Ascending));
sheet.getSort().setRange(sheet.getRange("A2:F7"));
sheet.getSort().setOrientation(SortOrientation.Columns);
sheet.getSort().apply();
wb.save("output/sortByIcon.xlsx");
}
实现效果如下图所示:

3. 按字体颜色排序
按字体颜色排序是指根据单元格的显示格式和字体颜色执行的排序操作。
public void SortByFontColor() {
Workbook wb = new Workbook();
SetExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
sheet.getRange("F2").getFont().setColor(Color.GetRed());
sheet.getRange("F3").getFont().setColor(Color.GetGainsboro());
sheet.getRange("F4").getFont().setColor(Color.GetGreen());
sheet.getRange("F5").getFont().setColor(Color.GetGainsboro());
sheet.getRange("F6").getFont().setColor(Color.GetGainsboro());
sheet.getRange("F7").getFont().setColor(Color.GetGainsboro());
sheet.getSort().getSortFields().add(new FontColorSortField(sheet.getRange("F2:F7"),
sheet.getRange("F7").getFont().getColor(), SortOrder.Ascending));
sheet.getSort().setRange(sheet.getRange("A2:F7"));
sheet.getSort().setOrientation(SortOrientation.Columns);
sheet.getSort().apply();
wb.save("output/sortByFontColor.xlsx");
}
实现效果如下图所示:

4. 按背景色排序
按背景颜色排序是指根据单元格的背景颜色进行排序的操作。
public void SortByBackgroundColor() {
Workbook wb = new Workbook();
SetExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
sheet.getRange("F2").getInterior().setColor(Color.GetLightPink());
sheet.getRange("F3").getInterior().setColor(Color.GetLightGreen());
sheet.getRange("F4").getInterior().setColor(Color.GetLightPink());
sheet.getRange("F5").getInterior().setColor(Color.GetLightGreen());
sheet.getRange("F6").getInterior().setColor(Color.GetLightBlue());
sheet.getRange("F7").getInterior().setColor(Color.GetLightPink());
sheet.getSort().getSortFields().add(new CellColorSortField(sheet.getRange("F2:F7"),
sheet.getRange("F4").getDisplayFormat().getInterior(), SortOrder.Ascending));
sheet.getSort().setRange(sheet.getRange("A2:F7"));
sheet.getSort().setOrientation(SortOrientation.Columns);
sheet.getSort().apply();
wb.save("output/sortByBackgroundColor.xlsx");
}
实现效果如下图所示:

5. 根据自定义序列排序
public void CustomSort() {
Workbook wb = new Workbook();
SetExampleData(wb);
IWorksheet sheet = wb.getActiveSheet();
ValueSortField sortkey = new ValueSortField(sheet.getRange("A2:A7"), "\"Angela\", \"Damon\"");
sheet.getRange("A2:F7").sort(SortOrientation.Columns, false, sortkey);
wb.save("output/customSort.xlsx");
}
实现效果如下图所示:

总结
以上就是在Java中对Excel数据进行排序的方法,如果您想了解更多有关于数据排序的玩法和技巧,可以参考这篇帮助手册,无论是初学者还是有经验的专业人士,该帮助手册都将为您提供有价值的指导和帮助。
扩展链接:
数据重整:用Java实现精准Excel数据排序的实用策略的更多相关文章
- Java (新)将Excel数据读取到ListMap
Java (新)将Excel数据读取到ListMap Maven依赖: pom.xml <!-- excel --> <dependency> <groupId>o ...
- Java代码实现excel数据导入到Oracle
1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码 import java.io.File; import java.io.Fi ...
- Java POI读取Excel数据,将数据写入到Excel表格
1.准备 首先需要导入poi相应的jar包,包括: 下载地址:http://pan.baidu.com/s/1bpoxdz5 所需要的包的所在位置包括: 2.读取Excel数据代码 package S ...
- Java:将Excel数据导入到数据库(一眼就看会)
所用Jar包 1. sqljdbc4.jar 连接数据库的Jar包(根据数据库的不同进行选择,我用的SqlServer2008) 2.Jxl.jar 访问Excel的Jar包 注意:支持以.xls结尾 ...
- java数据库导入excel数据
导入数据会将表格分为xls和xlsx两种格式,网上有很多案例 1.excel数据表中的数据不全,数据库中又是必填选项:---从sql语句入手:判断有无 来改变语句 //设置可有可无 字段 加一个必有字 ...
- Java POI 读取Excel数据转换为XML格式
1.首先要下载poi相关的包:http://poi.apache.org/ ,以下是所需的jar包 2.贴上详细的代码 public class ExcelToXml { /** * 将excel的 ...
- java通过jdbc连接数据库并更新数据(包括java.util.Date类型数据的更新)
一.步骤 1.获取Date实例,并通过getTime()方法获得毫秒数: 2.将获取的毫秒数存储到数据库中,注意存储类型为nvarchar(20): 3.读取数据库的毫秒数,作为Date构造方法的参数 ...
- Java 创建 Excel 数据透视表
Excel 数据透视表具有强大的数据处理功能,能够使表格中的数据更加直观化.使用Excel 数据透视表,能方便用户快速的排序. 筛选各种数据,同时也能满足用户对不同数据汇总的需求.本文将介绍如何在Ja ...
- kettle将Excel数据导入oracle
导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...
- 批量Excel数据导入Oracle数据库
由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...
随机推荐
- 前端vue自定义table 表格 表格组件 Excel组件
快速实现vue uni-app自定义table 表格 表格组件 Excel组件,扩充性好,可切换四宫格 九宫格 十二宫格; 下载完整代码请访问uni-app插件市场地址:https://ext.dcl ...
- 解放计算力:使用并行处理提升python for循环速度
Python 是一门功能强大的编程语言,但在处理大规模数据或复杂计算任务时,性能可能成为一个瓶颈.幸运的是,Python 提供了多种方法来提升性能,其中之一是利用并行处理来加速循环操作.本文将介绍如何 ...
- prometheus Histogram 统计原理
大家好,我是蓝胖子,书接上文,我在prometheus描点原理那一篇文章里,留了一个思考题: 我们通常会用到histogram_quantile去计算服务接口时间的耗时情况. histogram_qu ...
- go网络编程(一)
[B站最深度的Golang学习到实战 up主强力推荐] https://www.bilibili.com/video/BV1TK4y1a7ex/?p=101&share_source=copy ...
- Mysql基础5-用户及权限管理
一.介绍 DCL:Data Control Language(数据控制语言),用来管理数据库用户,控制数据库的访问,权限. 二.用户管理 1.查询用户 语法: 1.use mysql; 2.selec ...
- 解决phpMyAdmin点击"结构"列页面失去响应的问题
最后更新时间 2017-12-05. 我的环境: phpMyAdmin:4.0.4.1 PHP:5.6.11 第一步 关闭自动更新 打开 ./libraries 目录下的 vendor_config. ...
- Linux切换Root权限配置和无法切换排查
1.wheel组 普通用户禁止su切换root 在默认的情况下,普通用户通过su可以切换到root用户下,为了加强系统安全性,使用Linux的特殊用户组wheel来实现,只有用户加入到wheel组当中 ...
- 【go语言】1.1.1 Go 语言的历史和背景
Go 语言,也被称为 Golang,是一种静态强类型.编译型的开源编程语言.Go 语言的出现是为了解决当下的软件开发问题,特别是大规模软件系统的开发. Go 语言的设计者包括 Robert Gries ...
- [oracle]用户与权限管理
创建用户 CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 表空间 TEMPORARY TABLESPACE 临时表空间 QUOTA 空间配额大小 ...
- 树链剖分 | 洛谷 P4114 Qtree1
前言 题目链接:洛谷 P4114 Qtree1 前置知识:树链剖分 题意 给定一棵树,有修改边权和查询两点之间边权最大值两种操作,对于每个查询输出结果. 解析 已经在前置博客里提到,树链剖分 可以将树 ...