数据重整:用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数 ...
随机推荐
- Docker 中的 .NET 异常了怎么抓 Dump
一:背景 1. 讲故事 有很多朋友跟我说,在 Windows 上看过你文章知道了怎么抓 Crash, CPU爆高,内存暴涨 等各种Dump,为什么你没有写在 Docker 中如何抓的相关文章呢?瞧不上 ...
- 企业级logstash简单使用(ELK)
企业级logstash简单使用(ELK) 要使用logstash收集到Elasticsearch的方式,需确保logstash版本与es版本一致. 由于我也是刚刚研究使用,所以本文暂不会出现原理性的东 ...
- 快速实现 CDN 直播
功能简介 ZEGO Express SDK 支持推流到 CDN(Content Delivery Network,内容分发网络),包括转推 CDN 和直推 CDN 两种功能.开发者基于该功能可打通 R ...
- 【转载】Linux虚拟化KVM-Qemu分析(三)之KVM源码(1)
原文信息: 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作 ...
- Matlab2021a打包jar包问题(linux、windows)
都有chatgpt了,实在不想写博客....不过还是记录一下问题吧. 我们在用matlab打包jar包的时候,经常会出现打包出错的问题,但无非注意以下几点就行了: 1.打包方式 这个还是很简单的,而且 ...
- javascript中一些难以理解的专有名词 2(也不是很专有)
作用域链 让人迷惑的例子 function foo() {console.log(v)} function foo1() { var v = "v1" foo() console. ...
- FPGA移位加三法
介绍 BCD码 BCD码的英文全称是Binary-Coded Decimal,简称BCD,按字面解释是二进制十进制代码,是一种二进制的数字编码形式. 常见的BCD码有8421BCD码,2421BCD ...
- .Net Web API 004 Controller获取对象列表,传入数据以及对象
1.返回UserEntityList 这个服务接口的目的是分为用户列表,代码如下所示. /// <summary> /// 得到用户列表 /// </summary> /// ...
- python下的jstack - pystack
背景 python 多进程任务,卡在某个地方没有继续执行也没有报出异常,进程被hang住 日志没有捕获到相关信息,需要知道进程阻塞在哪里,为什么阻塞 jvm提供了jstack.jmap类工具进行性能分 ...
- 【opencv】传统图像识别:hog+svm行人识别实战
实战工具:python3.7+pycharm+opencv4.6算法知识:HOG特征提取.SVM模型构建实战目的:本次实战的目的是熟悉HOG+SVM工作流算法,初步掌握图像分类的传统算法.实战记录:本 ...