数据重整:用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数 ...
随机推荐
- Rainbond助力“信创应用”迁移上云
Rainbond v5.14.2 版本,又称信创版本.从这个版本开始,开源用户也可以利用 Rainbond 管理符合信创要求的硬件计算资源.在这个版本中,产品团队将此前只在企业版产品中存在的信创相关功 ...
- 企业级GitLab搭建
企业级GitLab搭建 一.简介 1.GitLab概述 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目. Rub ...
- ASP.NET Core 6框架揭秘实例演示[41]:跨域资源的共享(CORS)花式用法
同源策略是所有浏览器都必须遵循的一项安全原则,它的存在决定了浏览器在默认情况下无法对跨域请求的资源做进一步处理.为了实现跨域资源的共享,W3C制定了CORS规范.ASP.NET利用CorsMiddle ...
- 通用权限系统-Dozer对象转换
Dozer对象转换 介绍 Dozer 是一个 Java Bean 到 Java Bean 的映射器,它可以递归地将数据从一个对象复制到另一个.通常情况下,这些Java Beans将是不同的复杂类型. ...
- mysql的初体验——重装解决99%的问题
这两天被java_web的作业搞得头皮发麻,主要原因就是因为jdbc连接数据库一直失败,甚至差点把电脑搞崩,删个注册表,结果用户变量也被删了,心态直接炸裂.有以下几个地方,引以为戒: 1.配置环境最好 ...
- quarkus实战之三:开发模式(Development mode)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 前文咱们曾提到过几种启动方式,有一种用mav ...
- FreeBSD 内核模块和硬盘相关
查看已加载的内核模块 使用命令:kldstat 加载驱动: kldload xx 查看识别到的硬盘 使用命令:dmesg | grep sector freeBSD 查看硬件信息 使用命令:dmesg ...
- 层叠样式表(CSS)1
一.css的简介 1.层叠样式表的含义 层叠样式表:css是不仅是表现HTML的语言.还是进行样式修饰的语言 层叠:是对一个元素多次设置同一个样式,层层叠加覆盖,如不同的样式对一html标签进行修饰, ...
- 文心一言 VS 讯飞星火 VS chatgpt (69)-- 算法导论6.5 8题
八.HEAP-DELETE(A,i)操作能够将结点 i 从堆 A 中删除.对于一个包含 n个元素的堆,请设计一个能够在 O(lgn)时间内完成的 HEAP-DELETE 操作. 文心一言: 要在 O( ...
- 【Unity3D】激光雷达特效
1 由深度纹理重构世界坐标 屏幕深度和法线纹理简介中对深度和法线纹理的来源.使用及推导过程进行了讲解,本文将介绍使用深度纹理重构世界坐标的方法,并使用重构后的世界坐标模拟激光雷达特效. 本文完 ...