如题所示

项目中需要做表格导入功能,决定采用EasyExcel来进行操作,文件解析相对简单,不像导出那么复杂

demo使用到的依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.10</version>
</dependency>
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope>
</dependency>
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>compile</scope>
</dependency>
<dependency><groupId>org.assertj</groupId><artifactId>assertj-core</artifactId><version>RELEASE</version><scope>compile</scope>
</dependency>

具体代码展示如下:

package com.excel.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.biz.primus.common.exception.BizSilentException;
import lombok.extern.slf4j.Slf4j;import java.util.*;/*** @author: 骑猪撞地球QAQ* @date: 2022/3/28 15:34* @content: 动态表头数据解析监听器*/
@Slf4j
public class NoModelDataListener extends AnalysisEventListener<Map<Integer, String>> {List<Map<String, Object>> addList = new ArrayList<>();/*** 存储Key*/Map<Integer, String> key = new HashMap<>();/*** keuList*/List<String> keyList = new ArrayList<>();/*** 重写invokeHeadMap方法,获去表头,如果有需要获取第一行表头就重写这个方法,不需要则不需要重写** @param headMap Excel每行解析的数据为Map<Integer, String>类型,Integer是Excel的列索引,String为Excel的单元格值* @param context context能获取一些东西,比如context.readRowHolder().getRowIndex()为Excel的行索引,表头的行索引为0,0之后的都解析成数据*/@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {log.info("解析到一条头数据:{}, currentRowHolder: {}", headMap.toString(), context.readRowHolder().getRowIndex());Set<Integer> integerSet = headMap.keySet();for (Integer integer : integerSet) {keyList.add(headMap.get(integer));}key.putAll(headMap);}/*** 读取数据 筛选过滤数据 赛选出那些数据是添加 那些数据是修改** @param data    传入数据* @param context 读取数据*/@Overridepublic void invoke(Map<Integer, String> data, AnalysisContext context) {log.info("解析到一条数据:{}", JSON.toJSONString(data));HashMap<String, Object> objectObjectHashMap = new HashMap<>();Set<Integer> integerSet = data.keySet();String name = "";for (Integer integer : integerSet) {String s = data.get(integer);if (integer == 0) {name = data.get(integer);} else {// 第一格为战区、部门名称数据,不做校验boolean number = this.isNumber(data.get(integer));if (!number) {throw new BizSilentException(name + "数据格式错误,请调整后重试!");}}objectObjectHashMap.put(key.get(integer), s);}addList.add(objectObjectHashMap);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}/*** 是否是数字或小数位不超过两位** @param str 需要校验字符串* @return true:是;false:不是*/private boolean isNumber(String str) {String reg = "\\d+(\\.\\d+)?";if (str.matches(reg)) {String ss[];if (str.contains(".")) {ss = str.split("\\.");String s = ss[1];return s.length() <= 2;}}return str.matches(reg);}
}
 /*** 此处我们是由前端上传到文件服务器,再把url回传后端进行处理,也可直接传文件,后端使用MultipartFile的接收,InputStream inputStream = multipartFile.getInputStream()获取流*/public List<Map<Integer, String>> importData(String url){//初始化监听器NoModelDataListener noModelDataListener = new NoModelDataListener();// InputStream   InputStream inputStream;try {URL url = new URL(url1);URLConnection connection = url.openConnection();inputStream = connection.getInputStream();} catch (IOException e) {e.printStackTrace();throw new RuntimeException("读取文件失败!");}//解析数据 前三行为表头,从第四行开始读取 excelType()为指定文件类型,不需要也可以,sheet()为指定sheet,0为第一个sheet,headRowNumber()为开始读取的行数return  EasyExcelFactory.read(inputStream, noModelDataListener).excelType(ExcelTypeEnum.XLSX).sheet(0).headRowNumber(3).doReadSync();}

使用EasyExcel做excel文件解析相关推荐

  1. Excel文件解析性能对比(POI,easyexcel,xlsx-streamer)

    问题: 在解析excel内容时,由于用户误操作,偶尔会误录入大量空行,如果代码处置不当,进行文档内容解析时,就会占用大量时间和内存,甚至引起服务器内存消耗殆尽,导致服务无法访问,或者引起OOM. 解决 ...

  2. EasyExcel实现Excel文件导入导出

    1 EasyExcel简介 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址: https://git ...

  3. java中 Excel文件解析及超大Excel文件读写

    本文主要对Excel中数据的解析和生成进行总结 前言 在应用程序的开发过程中,我们经常要用到Excel进行数据的导入或导出.所以,在通过Java语言实现此类需求时,通常会对Excel文件进行解析或生成 ...

  4. easyexcel导入时读不到数据_SpringBoot中EasyExcel实现Excel文件的导入导出

    前言 在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据 ...

  5. Alibaba开源工具EasyExcel读写Excel文件

    前言 工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架? 小编之前呢就知道Java 解析.生成 Ex ...

  6. 阿里EasyExcel读写excel文件的基本使用

    EasyExcel读写excel文件 1.EasyExcel简介 2.对excel的写操作 1.1 创建一个普通的maven项目并引入相关依赖 1.2 创建实体类 1.3 实现写操作 1.3.1 创建 ...

  7. 浅谈Excel文件解析

    日常生活中,我们经常会遇到一些Excel文件,一般我们只会去用,不会去想他到底是怎样进行数据导入和导出的,今天,我们看看在java应用开发过程中,Excel文件的解析过程. 1. 使用-XSSF解析E ...

  8. jxls使用excel公司_使用jXLS将Excel文件解析为JavaBeans

    jxls使用excel公司 这篇文章展示了如何使用jXLS将Excel文件解析为JavaBeans列表. 这是我编写的通用实用程序方法: /** * Parses an excel file into ...

  9. 使用jXLS将Excel文件解析为JavaBeans

    这篇文章展示了如何使用jXLS将Excel文件解析为JavaBeans列表. 这是我编写的通用实用程序方法: /** * Parses an excel file into a list of bea ...

最新文章

  1. 在CentOS 6.6 64bit上安装截图软件shutter
  2. FSMO角色的Windows界面查看和转移示例
  3. solr的安装配置与helloworld
  4. 一个简单的Dockerfile
  5. JAVA中protected的作用
  6. 当面试官问你了不了解defineProperty的时候。。。
  7. 购买的Microsoft Office不小心卸载后重新安装方法
  8. 某电商客户数据价值分析项目
  9. AOP思想实现集中式登录,用户行为统计框架
  10. 从零搭建WebApi接口开发框架-接口规范
  11. google浏览器(chrome)登录、同步
  12. android 照片点击查看,Android PhotoView点击放大图片效果
  13. 多发性硬化功能磁共振成像
  14. 神舟Z7本安装Linux系统,神舟战神Z7-KP7GAISO重装原版Win10系统的方法
  15. python 根据网易云歌曲的ID 直接下载歌曲
  16. 总结下花了大约半年的时间从零开始的unity游戏开发(1)
  17. Learning Python 学习Python Lynda课程中文字幕
  18. Encoding常用方法,不积硅步无以至千里
  19. PAT乙级------1006~1010附代码及思路
  20. 手把手教你用artifactory搭建maven私有仓库

热门文章

  1. 【工业控制系统】ICS (工业控制系统)安全简介第3 部分
  2. 时间如流水,一去不复返
  3. 路由、中继、AP、客户端模式之间的区别
  4. MW4530R升级openwrt
  5. Ubuntu工作环境配置
  6. 上诉法院力挺FCC“网络中立”规则
  7. 基于matlab的语音信号PCM编码-2PSK传输仿真
  8. HTML5七夕情人节表白网页制作【浪漫的空中散落的花瓣3D相册】HTML+CSS+JavaScript 3D动态相册源码素材 html生日快乐祝福网页制作
  9. 多核时代:并行程序设计探讨(1)——并行系统
  10. android之通过MediaRecorder进行手机录音