0803导入文件报-EasyExcel 读取数据为空
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
一、学习链接:
1、https://www.cnblogs.com/xuejun-blog/p/14977791.html
2、https://blog.csdn.net/xcl_language/article/details/122015636
3、https://blog.csdn.net/m290345792/article/details/124623816
二、官网地址:
https://www.yuque.com/easyexcel
三、问题描述
文件上传的时候:MultipartFile file,通过com.alibaba.excel.EasyExcel类
使用read(File file, Class head, ReadListener readListener)
read方法,映射到指定的对象之后会出现null的问题。真实的原因是:使用到了读取的监听器,它会自动对数据的格式进行识别和映射。所以,有可能数据符合要求,但是,里面的文档格式加粗、字体、字体大小都有可能导致不对等置null。
public static ExcelReaderBuilder read(File file, Class head, ReadListener readListener) {
ExcelReaderBuilder excelReaderBuilder = new ExcelReaderBuilder();
excelReaderBuilder.file(file);
if (head != null) {
excelReaderBuilder.head(head);
}
if (readListener != null) {
excelReaderBuilder.registerReadListener(readListener);
}
return excelReaderBuilder;
}
/**
* Custom type listener run after default
*
* @param readListener
* @return
*/
public T registerReadListener(ReadListener<?> readListener) {
if (parameter().getCustomReadListenerList() == null) {
parameter().setCustomReadListenerList(ListUtils.newArrayList());
}
parameter().getCustomReadListenerList().add(readListener);
return self();
}
四、问题解决:
2.1、导入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
2.2、先写一个对应这个导入方法的导出功能,作为模版表,给予用户进行模版下载和二次编辑导入。
五、拓展其他报错问题:
1. 实体类添加了@Accessors注解(全null)
2.excel文件中列名 和 设置的实体类属性字段注解@ExcelProperty(value = “”)中value的值设置的不一样
@ExcelProperty(value = "A")
如果有多个字段名一样的列,不要重名,不然字段可能不能正确匹配,当然,也可以使用index属性来区分它们:
@ExcelProperty(value = "A", index = 0)
@ExcelProperty(value = "A", index = 1)
1
2
或者这样:
@ExcelProperty(index = 0)
@ExcelProperty(index = 1)
3.实体类@ExcelProperty中的value给了多个值(全null)
4.实体类属性名命名不遵循驼峰命名法