关于easyExcel中读取Excel表头的实例说明
作者:七国的天下,我要九十九 发布时间:2023-10-11 17:48:43
标签:easyexcel,表头,excel
前言
在使用easyExcel读取文件时,对于Excel的表头,在解析读取时分成不同的状态,需要加以区分.
1 环境准备
准备一个可以正常访问的SpringBoot项目.
1 添加pom
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2 添加dto对象
// 表格对应实体类
@Data
public class EasyExcelDemo {
@ExcelProperty("标题")
private String string;
@ExcelProperty("日期")
private Date date;
@ExcelProperty("金额")
private Double money;
/**
* 忽略这个字段
*/
@ExcelIgnore
private String name;
}
// 返回对象
@Data
public class Resp {
private List<EasyExcelDemo> importList;
}
3 准备一个控制器
@RestController
@RequestMapping("/easyExcel")
@Slf4j
public class EasyExcelController {
@PostMapping("/upload")
public void upload(@RequestParam("file") MultipartFile file) throws IOException {
// 读取Excel
EasyExcel.read(file.getInputStream(), EasyExcelDemo.class,
new EasyExcelListener()).sheet().headRowNumber(1).doRead();
// 从监听中获取结果集
Resp resp = EasyExcelListener.RESP.get();
List<EasyExcelDemo> importList = resp.getImportList();
log.info("导入集合 list = {}", importList);
// 清除数据
EasyExcelListener.RESP.remove();
}
}
4 准备一个监听类
@Slf4j
public class EasyExcelListener extends AnalysisEventListener<EasyExcelDemo> {
public static List<EasyExcelDemo> importList = new ArrayList<>();
public static final ThreadLocal<Resp> RESP = new ThreadLocal<>();
@Override
public void invoke(EasyExcelDemo data, AnalysisContext context) {
log.info("解析到的一条数据: excelRow = {}", data);
importList.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 解析完所有excel行, 保存到数据库或进行业务处理
log.info("解析的所有数据 list = {}", importList);
Resp resp = new Resp();
resp.setImportList(importList);
RESP.set(resp);
}
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
log.info("表头数据 excelHead= {}", headMap);
}
}
2 单表头Excel
单表头Excel, 即Excel的表头只有一行.
如上单行表头, 在读取时,在EasyExcel读取时设置headRowNumber属性,表示Excel的表头的行数,默认为1,设置为1时,表示第一行是表头,从第二行是表数据
EasyExcel.read(file.getInputStream(), EasyExcelDemo.class,
new EasyExcelListener()).sheet().headRowNumber(1).doRead();
使用postman上传excel查看结果:
读取到Excel的表头
读取到Excel的表数据
3 多表头Excel
多表头Excel, 即Excel的表头有多行.
如上单行表头, 在读取时,在EasyExcel读取时设置headRowNumber属性,表示Excel的表头的行数,设置为2时,表示第二和之前行都是表头.
EasyExcel.read(file.getInputStream(), EasyExcelDemo.class, new EasyExcelListener()).sheet().headRowNumber(2).doRead(); EasyExcel.read(file.getInputStream(), EasyExcelDemo.class,
new EasyExcelListener()).sheet().headRowNumber(2).doRead();
使用postman上传excel查看结果:
读取到Excel的表头, 读取到第一行
接着读取表头第二行
读取到Excel的表数据
4 总结
关于EasyExcel的表格读取,使用起来比较方便,但是对于多表头和单表头的读取,需要注意,是按照一层层的解析的.即再一些特殊的场景,需要校验表格的表头是否正确等, 要注意多表头的读取按照行数顺序读取数据.
来源:https://blog.csdn.net/ABestRookie/article/details/124136841
0
投稿
猜你喜欢
- 一、Socket 基础知识1.1 Socket 概述Socket 指的是“插座”,是应用层与传输层之
- 本文以一个实例简单实现了类的创建与初始化,实现代码如下所示:using System;using System.Collections.Ge
- mybatis-plus依赖导入<dependency> <groupId>
- 我就废话不多说了,大家还是直接看代码吧~ public List<FreightM> sortList(List&l
- 这篇文章主要介绍了SpringBoot 使用Mybatis分页插件实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 功能:解决web站点的登录,权限验证,授权等功能优点:在不影响站点业务代码,可以权限的授权与验证横切到业务中1、要添加的依赖<!--t
- Java关键字及其作用一、 总览:访问控制private protected public类,方法和变量修饰符abstract class
- 场景在任何一个Form表单的操作页面或者数据台账的查询页面,基本都会看到一个清除的按钮,其功能就是用来清除我们需要抛弃的已经写入到控件内的数
- 场景很多情况下,查单条记录也用通用查询接口,但是输入的条件却能确定唯一性。如果我们要确定list中只有一条记录,如下写法:// 记录不为空
- 在使用SpringSecurity中,大伙都知道默认的登录数据是通过key/value的形式来传递的,默认情况下不支持JSON格式的登录数据
- 使用HttpServletRequest可以防止盗链行为,什么是盗链行为,比如说在一个别的网站上超链接,指向我们的网页中的某个数据,这样从他
- 项目开发中对于一些数据的处理需要用到多线程,比如文件的批量上传,数据库的分批写入,大文件的分段下载等。 通常会使用spring自带的线程池处
- springboot 无法自动装配@Autowired 报错:无法自动装配基本上是因为1、项目里有类似mybatis @Mapper这种第三
- 文件上传概述实现web开发中的文件上传功能,需完成如下二步操作:在web页面中添加上传输入项在servlet中读取上传文件的数据,并保存到本
- 访问Controller返回400BadRequest问题SpringMVC使用自定义类型接收参数时, form提交会返回400 Bad R
- 目录概述&选型单机安装配置双机主从高可用搭建启动多个NameServer 和 Broker重要参数说明可视化管理平台SpringBo
- 代码如下:/** * 动态生成SQ及SQL参数L * @param ve 接收到的消息的CHGLIST &nbs
- C#Process OutputDataReceived事件不触发问题描述项目需要用cmd调用其它软件,实时获取软件处理结果,并根据获取到的
- 第一种方法:同步代码块:作用:把出现线程安全的核心代码上锁原理:每次只能一个线程进入,执行完毕后自行解锁,其他线程才能进来执行锁对象要求:理
- Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动