使用Hutool读取大Excel

ops/2024/11/27 18:45:12/

改造后可以在数秒内读取百万级别量excel数据,注意:csv不行,先转成excel再读取

java">public class MyBigExcelUtil {/*** 储存表头*/private static List<Object> headLine;/*** 储存返回数据*/private static List<Map<String, Object>> datas = new ArrayList<>();/*** 储存表头行号,默认是第0行*/private static AtomicInteger headNo = new AtomicInteger(0);/*** 设置 表头 行号*/public static void setHeadNo(int headNum) {headNo.set(headNum);}/*** @param pathAndName        文件路径* @param idOrRidOrSheetName Excel中的sheet id或者rid编号或sheet名称,rid必须加rId前缀,例如rId1,如果为-1处理所有编号的sheet*/public static List<Map<String, Object>> readBigExcel(String pathAndName, int idOrRidOrSheetName) {datas.clear();Excel07SaxReader reader = new Excel07SaxReader(new MyRowHandler());reader.read(pathAndName, idOrRidOrSheetName);Console.log("【{}】 读取完成 ... ", pathAndName);return datas;}/*** @param pathAndName        文件路径* @param idOrRidOrSheetName Excel中的sheet id或者rid编号或sheet名称,rid必须加rId前缀,例如rId1,如果为-1处理所有编号的sheet* @param beanType           类类型* @param <T>                返回值为List<T>* @return*/public static <T> List<T> read(String pathAndName, int idOrRidOrSheetName, Class<T> beanType) {return read(pathAndName, idOrRidOrSheetName, beanType, Collections.EMPTY_MAP);}/*** @param pathAndName        文件路径* @param idOrRidOrSheetName Excel中的sheet id或者rid编号或sheet名称,rid必须加rId前缀,例如rId1,如果为-1处理所有编号的sheet, 一般传0* @param beanType           类类型    映射成的实体类* @param fieldMapping       T类型对应的别名,即类类型对应的 excel 的关系   Map<excel列的名字, java中定义实体的字段名>* @param <T>                返回值为List<T>* @return*/public static <T> List<T> read(String pathAndName, int idOrRidOrSheetName, Class<T> beanType, Map<String, String> fieldMapping) {CopyOptions copyOptions = CopyOptions.create();if (CollUtil.isNotEmpty(fieldMapping)) {copyOptions.setFieldMapping(fieldMapping);}readBigExcel(pathAndName, idOrRidOrSheetName);List<T> datalist = new ArrayList<>();for (Map<String, Object> data : datas) {T t = ReflectUtil.newInstanceIfPossible(beanType);datalist.add(BeanUtil.fillBeanWithMap(data, t, copyOptions));}return datalist;}/*** 行数据处理*/private static class MyRowHandler implements RowHandler {@Overridepublic void handle(int sheetIndex, long rowIndex, List<Object> rowList) {//Console.log("[{}] [{}] {}", sheetIndex, rowIndex, rowList);if (rowIndex < headNo.get()) {return;} else if (rowIndex == headNo.get()) {headLine = rowList;} else {Map<String, Object> tMap = new HashMap<>(rowList.size());for (int i = 0; i < headLine.size(); i++) {Object key = headLine.get(i);Object val = rowList.get(i);tMap.put(key == null ? "" : key.toString(), val == null ? "" : val);}datas.add(tMap);}}}
}

http://www.ppmy.cn/ops/137141.html

相关文章

Jtti:排查和解决服务器死机问题的步骤

服务器死机是一个严重的问题&#xff0c;可能导致业务中断和数据丢失。要排查和解决服务器死机问题&#xff0c;需要系统地检查以下几个方面&#xff1a; 一、硬件问题 电源供应&#xff1a;检查电源是否稳定&#xff0c;是否有电源故障或电源线松动的问题。查看不间断电源(UPS…

AMD(Xilinx) FPGA配置Flash大小选择

目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢&#xff1f; 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时&#xff0c;选择合适的配置Flash是我们进行硬件设计必须考虑的&#xff0c;那么配置Flash大小的选择由什…

51单片机从入门到精通:理论与实践指南(一)

单片机在智能控制领域的应用已非常普遍&#xff0c;发展也很迅猛&#xff0c;学习和使用单片机的人员越来越多。虽然新型微控制器在不断推出&#xff0c;但51单片机价格低廉、易学易用、性能成熟&#xff0c;在家电和工业控制中有一定的应用&#xff0c;而且学好了51单片机&…

【iOS】UICollectionView的学习

UICollectionView的学习 文章目录 UICollectionView的学习前言简单使用UICollectionView相关的代理方法Layout中常用的一些属性其他效果实现 瀑布流布局的一个实现自定义UICollectionViewFlowLayout实现一个圆环布局VC层中 小结 前言 UICollectionVIew和我们之前的UITableView比…

【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | 提示词Prompt应用实例 文章目录 &#x1f4af;前言&#x1f4af;准确引导ChatGPT创建爆款小红书文案GPTs指令案例&#x1f4af; 高效开发GPTs应用的核心原则明确应用场景和目标受众构建多样化风格模板提问与引…

[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法

本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时&#xff0c;突然发现它的一个接口&#xff0c;被另一个服务ip频繁的请求。 按理说&#xff0c;之前设置的是&#xff0c;每隔1分钟请求一次接口。但从日志来看&#xff0c;则是1秒钟请求一次&#xff…

Javaweb关于servlet

文章目录 servlet1.servlet概述2.JSP与Servlet3.Servlet API4.Servlet生命周期5.部署运行Servlet servlet 1.servlet概述 ServerApplet&#xff0c;是一种服务器端的Java应用程序&#xff0c;只有当一个服务器端的程序使用了Servlet API的时候&#xff0c;这个服务端的程序才…

Rust学习(十):计算机科学简述

Rust学习&#xff08;十&#xff09;&#xff1a;计算机科学简述 在计算机技术这片广袤的领域中&#xff0c;深入理解其内在机制与逻辑需要付出诸多努力。 学习基础知识是构建计算机技术能力大厦的基石&#xff0c;而这一过程往往漫长而艰辛。只有在对基础知识有了扎实的掌握…