在EasyExcel中默认是不会去读取表头数据的

我们在编写EasyExcel解析类的时候,继承了AnalysisEventListener类

看一下该类的结构,可以看到它有invokeHeadMap这个方法

直接覆写这个方法,就可以得到表头数据了

public class ExcelService extends AnalysisEventListener<Map<Integer, String>> {private static final Logger LOGGER = LoggerFactory.getLogger(ExcelService.class);List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();@Overridepublic void invoke(Map<Integer, String> data, AnalysisContext context) {LOGGER.info("解析到的数据: {}", data);list.add(data);}@Overridepublic void invokeHeadMap(Map headMap, AnalysisContext context) {LOGGER.info("解析到的表头数据: {}", headMap);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {saveData();}/*** 如果有必要,存储到数据库*/private void saveData() {LOGGER.info("{}条数据,开始存储数据库!", list.size());LOGGER.info("存储数据库成功!");}
}

测试

@Test
void contextLoads() {String fileName = "test1.xlsx";// 这里 只要,然后读取第一个sheet 同步读取会自动finishEasyExcel.read(fileName, new ExcelService()).sheet().doRead();
}

看到好像有挺多人要做这个需求的,然后都说看不懂我上面的案例,这里就再更新一版完整的代码

准备的 Excel 文件数据(第一行是 Header,其他的是数据)

依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</version>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>

定义一个实体类,用于解析 excel 数据

package com.max.excel.model;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;@Data
public class UserExcel {@ExcelIgnoreprivate Integer id;@ExcelProperty(index = 0, value = "姓名")private String name;@ExcelProperty(index = 1, value = "年龄")private Integer age;
}

定义一个监听器,用来读取 Excel 数据

package com.max.excel.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.max.excel.model.UserExcel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Slf4j
@Component
public class UserExcelListener extends AnalysisEventListener<UserExcel> {// 定义一个全局的读取header的map,方便其他地方使用改数据,当然要是你存进数据库那就更方便取了private final Map<Integer, String> userHeaderMap = new HashMap<>();// excel主数据private List<UserExcel> userExcelList = new ArrayList<>();// excel的主数据是在这个生命周期读取的@Overridepublic void invoke(UserExcel userExcel, AnalysisContext analysisContext) {userExcelList.add(userExcel);}// 解析完excel需要干的事情@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {log.info("已解析完所有数据!");}// excel头部数据@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {// 存到全局的map中userHeaderMap.putAll(headMap);}public List<UserExcel> getUserExcelList() {return userExcelList;}public void setUserExcelList(List<UserExcel> userExcelList) {this.userExcelList = userExcelList;}public Map<Integer, String> getUserHeaderMap() {return userHeaderMap;}
}

测试

package com.max.excel;import com.alibaba.excel.EasyExcel;
import com.max.excel.listener.UserExcelListener;
import com.max.excel.model.UserExcel;
import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.util.Collections;
import java.util.Optional;@Slf4j
public class Test {public static void main(String[] args) {String file = "t.xls";String reFile = "t.xls";UserExcelListener listener = new UserExcelListener();// 读取EasyExcel.read(new File(file), UserExcel.class, listener).sheet(0).doRead();// 读取转成的Java对象log.info("===========Excel Header数据===========");Optional.ofNullable(listener.getUserHeaderMap()).orElse(Collections.emptyMap()).forEach((k, v) -> {System.out.println(v);});log.info("===========Excel数据===========");Optional.ofNullable(listener.getUserExcelList()).orElse(Collections.emptyList()).forEach(System.out::println);}
}

最终结果

EasyExcel读取第一行数据,读取表头相关推荐

  1. easyexcel 读取指定行数据_EasyExcel从指定位置开始读数据

    之前小小的接触过easyExcel,代替了传统的poi,上次使用的时候,表头比较传统,也不复杂,但是这次呢表头稍微有点复杂,读取数据要从指定的位置开始,要从指定位置开始读取easyExcel,所以呢在 ...

  2. java的socket读取一行就结束运行了?使用这种方法可以读取多行数据!

    目录 引出问题 第一种(只能读取一行数据) 第二种(可以读取多行数据) 引出问题 写一个socket的公共方法,结果发现socket读取一行数据就结束了,百思不得其解. 在网上也找了一些资料,很多也有 ...

  3. 字符缓冲输入流,高效读取整行数据

    import java.io.BufferedReader; import java.io.FileReader;/* 字符缓冲输入流,高效读取整行数据*/ public class Writer { ...

  4. 一个将当前目录下HEX文件的第一行数据删除的程序...

    为什么要写这样一个函数 在使用SoftConsole开发M3程序时,生成的hex文件,必须要把第一行数据删除,才能在Libero中使用,所以写了这个小工具,这是2.0版本了,第一版是直接删除第一行数据 ...

  5. JAVA-获取Excel文件的第一行数据

    1.pom.xml引入相关依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi ...

  6. easyexcel 读取指定行数据_Excel怎么设置只提取指定行中的数据?

    Excel怎么设置只提取指定行中的数据?有些时候我们需要从一个excel文件中的数据库中提取指定的行或列中的数据.例如如图示,是国内所有上市公司的行业统计.但是现在我们只需要其中部分上市公司的行业统计 ...

  7. MySql 随机读取多行数据并显示

    随机读取20行: SELECT * FROM quiz ORDER BY RAND() LIMIT 20 分别显示这20行数据:      $result=mysql_query($query);   ...

  8. 【工程实践】jsonlines 读取多行数据

    前言 在进行数据存储时,json文件简洁精炼,成为首选.但是在简洁的同时,也存在弊端,如果要存储的数据量过大,那么读取一个json文件需要一次性读入,这需要占用很大的内存.所以我们可以将文件存储为多个 ...

  9. 如何:在OpenText Workflow 6.5模型中保存和读取多行数据

    在Captaris Workflow 6.0和之前的版本中,保存多行数据似乎没有被提及,因此大部分(包括我的团队)都要自己建立(利用IDE的向导也算)数据库来保存订单项.物品列表.人员列表这样的多行集 ...

最新文章

  1. Kafka事务特性详解
  2. 网易试题——关于箭头函数与this和arguments的关系
  3. abb限位开关已打开drv1_广告雕刻机限位开关触发
  4. 小蛮机器人如何联网_机器人视界|数字化时代 机器人成为新晋“代言人”
  5. 搭建Hadoop平台(一)之配置用户名及hosts文件
  6. I00025 寻找循环数
  7. 微信对网络影响的技术试验及分析(论文全文)
  8. Julia:和Julia相关的经济学网站 和初学者网站
  9. 成人高考计算机专业,成人高考计算机类里的哪个专业好找工作?
  10. matlab对样本方差区间估计,已知样本均值和样本方差做区间估计
  11. 19、STM8单片机RS485串口通讯实验
  12. 前端导出 xlsx文件
  13. 【图书馆】——中英文对照表
  14. 什么是构造函数及定义
  15. jq 下拉列表选中事件_JQuery select各种事件
  16. Java 某天的开始时间与结束时间
  17. Word文档怎样修改纸张的方向?分享方法!word文档如何更改纸张的方向?
  18. 计算机专业近几年的参考文献,近几年计算机专业发参考文献 计算机专业发专著类参考文献哪里找...
  19. 电商数据分析指标体系实例。
  20. 《网络攻防》实验三:免杀原理与实践

热门文章

  1. 风控并行组合模型及其额度定价场景实践
  2. 清华大学参赛计算机集群,清华学生超算团队再获双料冠军
  3. 高并发环境下热点数据访问的最佳实践。
  4. 2022第17届中国重庆橡塑工业展览会|成都橡塑展
  5. javaweb应用网站实现第三方QQ登入过程
  6. 全网最全面的西门子1500硬件冗余项目,博图15.1
  7. Golang-go mod download 出现 dial tcp 34.64.4.17:443: i/o timeout
  8. 【数据结构】图—迪杰斯特拉(Dijkstra)算法
  9. 我把全国旅游数据用Python爬下来后发现,这个地方才是真正的旅游胜地
  10. git中的smart checkout和force checkout