EasyExcel复杂表头数据导入

目录

    • 表头示例
    • 导入代码
    • 数据导出

表头示例

在这里插入图片描述

导入代码

    @Overridepublic void importExcel(InputStream inputStream) {ItemExcelListener itemExcelListener = new ItemExcelListener();EasyExcel.read(inputStream, ImportItem.class, itemExcelListener).headRowNumber(2).sheet().doRead();}
@Slf4j
public class ItemExcelListener extends AnalysisEventListener<ImportItem> {/*** 定义100条数据存储一次,然后清理list,方便内存回收*/private static final int BATCH_COUNT = 300;/*** 记录导入的总记录数*/private Long listSize = 0L;/*** 缓存的数据*/private List<ImportItem> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);//标记处理第一行表头private boolean firstRowProcessed = true;private HashMap<Integer, HashMap<String,String>> dynamicInfoList;/*** 解析每一行表头数据时调用*/@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {// 读取表头数据并构造HashMapif (firstRowProcessed){HashMap<Integer, HashMap<String, String>> infoList = new HashMap<>();for (Map.Entry<Integer, String> entry : headMap.entrySet()){Integer key = entry.getKey();String value = entry.getValue();if (!Objects.equals(value, "固定数据")){infoList.put(key,null);}}dynamicInfoList = infoList;firstRowProcessed = false;}else {for (Map.Entry<Integer, String> entry : headMap.entrySet()){HashMap<String, String> info = new HashMap<>();Integer key = entry.getKey();String value = entry.getValue();if (dynamicInfoList.containsKey(key)){info.put(value,null);dynamicInfoList.replace(key,info);}}}}/*** 每解析一条数据都会调用一次*/@Overridepublic void invoke(ImportItem importItem, AnalysisContext analysisContext) {// 获取实体类中不匹配的数据ReadRowHolder readRowHolder = analysisContext.readRowHolder();Map<Integer, Cell> cellMap = readRowHolder.getCellMap();JSONObject dynamicInformation = new JSONObject();for (Map.Entry<Integer, Cell> entry : cellMap.entrySet()){Integer key = entry.getKey();Cell entryValue = entry.getValue();if (dynamicInfoList.containsKey(key)){String string = JSON.toJSONString(entryValue);JSONObject jsonObject = JSON.parseObject(string);String value = jsonObject.getString("stringValue");HashMap<String, String> info = dynamicInfoList.get(key);for (String attribute : info.keySet()) {dynamicInformation.put(attribute,value);}}}cachedDataList.add(importItem);// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOMif (cachedDataList.size() >= BATCH_COUNT) {saveData();// 存储完成清理 listcachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);}}/*** 所有数据解析完成后调用*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {if (!cachedDataList.isEmpty()){saveData();// 存储完成清理 listcachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);}}public void saveData(){//将数据存入数据库}}

数据导出

参考文章:EasyExcel动态复杂表头导出方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSPF 高级特性3

一、OSPF安全特性 1、OSPF报文验证&#xff1a; 区域验证模式&#xff1a;在区域下配置一致的密码才能加入同一个区域。 [r3-ospf-1-area-0.0.0.0]authentication-mode md5 1 cipher 123456 接口验证模式&#xff1a;链路两端的接口必须配置一致的密码才能建立邻居关系 [r5-Gig…

回归预测 | Matlab实现SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量机的多输入单输出回归预测

Matlab实现SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量机的多输入单输出回归预测 目录 Matlab实现SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量机的多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量…

oracel处理XML时,报ORA-31011、ORA-19202。

原字段为clob&#xff0c; 查询 SELECT XMLTYPE(字段) FROM TABLE_A报错如下&#xff1a; ORA-31011: XML 语法分析失败 ORA-19202: XML 处理 LPX-00217: invalid character 12 (U000C) Error at line 1559时出错 ORA-06512: 在 "SYS.XMLTYPE", line 272 ORA-0651…

大洋钻探系列之一引子

大洋科学钻探计划自1968年启动开始&#xff0c;迄今已有50余年&#xff0c;先后经历了&#xff14;个阶段。深海钻探计划(Deep Sea Drilling Program&#xff0c;DSDP&#xff0c;1968-1983年&#xff09;、国际大洋钻探计划&#xff08;Ocean Drilling Program&#xff0c;ODP…

目标检测 图像处理 计算机视觉 工业视觉

目标检测 图像处理 计算机视觉 工业视觉 工业表盘自动识别&#xff08;指针型和数值型&#xff09;智能水尺识别电梯中电动车识别&#xff0c;人数统计缺陷检测&#xff08;半导体&#xff0c;电子元器件等&#xff09;没带头盔检测基于dlib的人脸识别抽烟检测和睡岗检测/驾驶疲…

【使用Python编写游戏辅助工具】第三篇:鼠标连击器的实现

前言 这里是【使用Python编写游戏辅助工具】的第三篇&#xff1a;鼠标连击器的实现。本文主要介绍使用Python来实现鼠标连击功能。 鼠标连击是指在很短的时间内多次点击鼠标按钮&#xff0c;通常是鼠标左键。当触发鼠标连击时&#xff0c;鼠标按钮会迅速按下和释放多次&#xf…

双十一快递“当天达”?宏电助力物流分拣系统高效运行

​众所周知&#xff0c;每年双11都是快递业务的高峰期&#xff0c;是对各大物流企业运输能力的一次大考。为了持续提升快递配送的速度&#xff0c;自动化物流仓储建设的速度也在不断的加快&#xff0c;而在一个完整的自动化物流仓储系统中&#xff0c;输送分拣设备是物流自动化…

MySql优化经验分享

一条sql的具体执行过程 连接 我们怎么查看MySQL当前有多少个连接&#xff1f; 可以用show status命令&#xff0c;模糊匹配Thread&#xff0c; Show global status like "Thread%" show global variables like wait timeout;—非交互式超时时间&#xff0c;如JDBC…

c++ | 字符串与指针的恩断情仇

我想&#xff0c;c/c中难的不是指针&#xff0c;而是其中的变化&#xff0c;尤其是思维的转变。很多东西 就是容易掉进陷阱。好在&#xff0c;你我都是善于思考的码农&#xff01; 大致情况是这样的&#xff0c;底层<–>c语言<–>c<–>应用 而数据的传输的最…

【MongoDB】Windows 安装MongoDB 6.0

一、下载安装包 安装包下载地址https://www.mongodb.com/try/download/community这里我选择的是 二、解压并安装 1、解压 这里我将压缩包解压到了D盘&#xff0c;并重命名成了mongodb&#xff0c;解压后的目录如下&#xff1a; 2、创建配置文件 在D:\mongodb下新建conf目录…

【触想智能】4U触摸工控机具有哪些优势?

工控机也叫工控主机&#xff0c;和我们常见的普通电脑主机是一样的&#xff0c;都是由CPU、主板、内存、硬盘、电源以及机箱组成的。 工控机有很多分类&#xff0c;有无风扇工控机、嵌入式工控机、上架式工控机、4U触摸工控机等。上架式工控机在市场上是比较受欢迎的&#xff0…

Django实战项目-学习任务系统-发送邮件通知

接着上期代码内容&#xff0c;继续完善优化系统功能。 本次增加发送邮件通知功能&#xff0c;学习任务系统发布的任务&#xff0c;需要及时通知到学生用户知晓。 由于目前智能手机普及&#xff0c;人人都离不开手机&#xff0c;所以手机端接收通知信息更加及时有效。 其中微信…

superagent 库

superagent 是一个流行的 JavaScript 库&#xff0c;用于在浏览器和 Node.js 环境中进行 HTTP 请求。它提供了简洁的 API&#xff0c;使得发送异步请求变得非常容易。 以下是一个使用 superagent 的简单示例&#xff1a; 在浏览器环境中&#xff1a; // 发送 GET 请求 supe…

自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目

自定义的卷积神经网络模型CNN&#xff0c;对图片进行分类并使用图片进行测试模型-适合入门&#xff0c;从模型到训练再到测试&#xff1a;开源项目 开源项目完整代码及基础教程&#xff1a; https://mbd.pub/o/bread/ZZWclp5x CNN模型&#xff1a; 1.导入必要的库和模块&…

PP-Matting:trimap free的高精度自然图像抠图

论文&#xff1a;https://arxiv.org/abs/2204.09433 代码&#xff1a;https://github.com/PaddlePaddle/PaddleSeg 1、动机 在自然图像抠图领域&#xff0c;大多数方法都是基于Trimap来做抠图&#xff0c;这种trimap-based的方式在抠图时还需要用户绘制一个trimap作为模型输入&…

SpringBoot--Web开发篇:含enjoy模板引擎整合,SpringBoot整合springMVC;及上传文件至七牛云;restFul

SpringBoot的Web开发 官网学习&#xff1a; 进入spring官网 --> projects --> SpringBoot --> LEARN --> Reference Doc. --> Web --> 就能看到上述页面 静态资源映射规则 官方文档 总结&#xff1a; 只要是静态资源&#xff0c;放在类路径下&#xff1…

整理笔记——0欧电阻、电感、磁珠

设计电路时&#xff0c;经常用到0欧电阻、电感、磁珠&#xff0c;这三个基础电子原件万用表量都是“短路”&#xff0c;这三者之间有什么区别&#xff1f;什么情况下用什么原件&#xff1f; 一、0欧电阻 0欧电阻&#xff0c;并不是指元件的电阻值为0&#xff0c;而是电阻值很小…

使用免费 FlaskAPI 部署 YOLOv8

目标检测和实例分割是计算机视觉中关键的任务&#xff0c;使计算机能够在图像和视频中识别和定位物体。YOLOv8是一种先进的、实时的目标检测系统&#xff0c;因其速度和准确性而备受欢迎。 Flask是一个轻量级的Python Web框架&#xff0c;简化了Web应用程序的开发。通过结合Fla…

SpringBoot 日志

一、概述 日志是程序的重要组成部分&#xff0c;程序报错了&#xff0c;我们可以通过查看日志信息排除和定位问题。 二、日志格式 在启动 SpringBoot 项目时&#xff0c;控制台中默认会打印一些日志&#xff0c;下面我们截取一段日志信息&#xff0c;分析一下日志的格式&…

【蓝桥每日一题]-二分类型(保姆级教程 篇3) #路标设置 #跳石头

今天接着讲二分题型 目录 题目&#xff1a;路标设置 思路&#xff1a; 题目&#xff1a;跳石头 思路&#xff1a; 题目&#xff1a;路标设置 思路&#xff1a; 求&#xff1a;放n个路标后的最小空旷指数 二分查找&#xff1a;对空旷指数进行二分 二分依据: 该空旷指数下放…