利用hutool解析excel内容转换为实体,实体属性为空 您所在的位置:网站首页 vue读取excel不读取第一行 利用hutool解析excel内容转换为实体,实体属性为空

利用hutool解析excel内容转换为实体,实体属性为空

2023-09-08 11:16| 来源: 网络整理| 查看: 265

一、博客前提

工作中有遇到一个需求,客户提供需要插入数据库的原始数据的excel表格,我去解析表格,将数据插入数据库。当时立马就想到了用hutool的工具类,直接将excel表格内容的转换为我需要的实体对象。网上也有写了很多这种类似的博客,可是我在参考网上博客内容去做,利用hutool解析excel内容转换为实体,但是遇到实体属性为空的问题,本篇博客就作为一个工作笔记记录一下。

二、代码实现 1.引入pom cn.hutool hutool-all 5.5.8 org.apache.poi poi-ooxml 3.1.7 2、定义excel转换后实体 @Data public class GoodFavorOfExcel { /** * 宝贝id */ private Long id; /** * 总收藏量 */ private Integer totalFavor; /** * 时间 */ private String date; } 3、解析代码 @PostMapping(value = "getData") public Resp indexConvert(@RequestParam("file") MultipartFile file) throws IOException { ExcelReader reader = ExcelUtil.getReader(file.getInputStream()); reader.addHeaderAlias("日期", "date"); reader.addHeaderAlias("宝贝ID", "id"); reader.addHeaderAlias("收藏数", "totalFavor"); List list = reader.readAll(GoodFavorOfExcel.class); return RespUtil.success(); } 4、excel表格格式

5、结果展示

到这里展示的内容,就已经将excel里的转换为我需要的实体对象list了

三、问题复现即解决 2、

下面来展示下,我参照网上的博客写代码时遇到的问题

通过和上面的图片对比,我们就可以发现在转换数据的时候,虽然数据大小也是和前面的一样有5126条,但是里面的实体内容确实null,原因是因为

ExcelReader reader = ExcelUtil.getReader(file.getInputStream()); List list = reader.readAll(GoodFavorOfExcel.class);

没有对ExcelReader对象增加标题别名,导致hutool工具类底层解析时,无法得知那一列的内容是对应实体里的哪一个属性。这也是网上大多数博客没有讲到的地方。hutoll的api也没有讲到这一点:https://www.hutool.cn/docs/#/poi/Excel%E8%AF%BB%E5%8F%96-ExcelReader。

2、解决方法 ExcelReader reader = ExcelUtil.getReader(file.getInputStream()); reader.addHeaderAlias("日期", "date"); reader.addHeaderAlias("宝贝ID", "id"); reader.addHeaderAlias("收藏数", "totalFavor");

解决的方法就是设置标题和别名的对应关系

四、总结

本篇博客仅仅是一个很简单的使用笔记,想要详细了解为什么设置了标题,别名对应关系就可展示数据的读者,可自行查看源码了解原理。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有