最近在项目中需要实现在web端导入导出的功能,于是就去百度上寻找成熟的技术和文章,试着根据资料去实现自己的业务.于是就发现了阿里写的EasyExcel,它以及其简洁的代码和配置吸引了我.
导出的文章在网上一搜一大把,而且也没有多么的复杂.我就转载一篇文件https://segmentfault.com/a/1190000019472781
我就是根据这篇文章实现的导出功能.
导出实现了下一步就导入了,于是我就陷入了两周的bug当中(本人是个小白,我的老师就是搜索引擎)
下面上图
这个是我的excel文件,于是我就跟着EasyExcel上的配置一点点的写(至于配置,官方代码已经写的很详细了,这里就不做介绍了)
这是我的实体类
/** value 列名 index 列顺序 */
@ExcelProperty( index = 0)
private Integer id;
/** 员工姓名 */
@ExcelProperty( index = 1)
private String name;
/** 军团 */
@ExcelProperty( index = 2)
private String corps;
/** 部门 */
@ExcelProperty(index = 3)
private String dept;
/** 奖励日期 */
@ExcelProperty(index = 4)
@DateTimeFormat("yyyy-MM-dd")
private Date award_time;
/** 金额 */
@ExcelProperty( index = 5)
private Integer bounty;
/** 奖励原因 */
@ExcelProperty( index = 6)
private String cause;
/** 奖金来源 */
@ExcelProperty( index = 7)
private String source;
/** 凭证号 */
@ExcelProperty(index = 8)
private String voucher_number;
/** 备注 */
@ExcelProperty( index = 9)
private String remark;
这是我的后端控制器层代码
这是我的前端代码
这是原因
好了,准备就绪,运行,选择导入文件,导入
满怀期待的报错了
看来是是日期格式转换问题,因为读到的数据都是null,打开我的excel文件
数据库的日期格式是不认识以.进行分割的.修改成为以/分割后,就不报这个错了,但是又出了新的错误.
有道翻译过来就是"将数据'序号'转换为整数类型的错误"于是对着官方文档和自己的excel文件,发现是把我第一行的列名,也给作为值赋给我的实体类对象了,所以才会报这个粗.
添加这段代码的意思就是让它从第3行(从0开始)开始读数据赋值.
好了,测试导入
成功.
不过在这之前,本人一直有一个问题没有解决,就是如果我没有手动添加get()set()方法就会报这个错
通过debug可以看到值都是null
可是我的excel文件内都是有值的,于是在一位不知名大佬的帮助下,意识到可能是因为lombok没有动态的生成set()方法,所以对象的属性值全都为null.于是我手动的添加了set方法后就导入成功了.
但是lombok中的@Data注解其中就有动态生成get()set()的作用啊,这是为什么呢?算了,能实现就行了.以后再研究吧,然后我就看到了,这个链式加载@Accessors(chain = true)我也没用到啊,那就删了吧.突然一个想法,会不会是因为这个链式加载的原因呢,于是我就把getset方法全删了,和这个链式加载也删了后一试,嗨呀成功了~~~可能就是这个链式加载冲突了
总结,用这个easyExcel导入导出还是比较方便的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。