上篇介绍了下EasyExcel的读写excel文件的使用,现在利用它来实现项目中的excel文件导出和导入的功能。原文在这里:
https://blog.csdn.net/qq_60168783/article/details/122131947
软件测试安装包,学习路线以及python入门到进阶,爬虫数据分析全套资料分享讲解编程简单学 / python · GIT CODE
现在有一个字典列表,要把里面的数据实现导出和导入。
既然是整合到项目里,跟之前的练习还是有些区别的。说是导出功能,实际上也算是个下载的操作。
1. 实现后端接口
controller 类中增加导出数据字典的控制器方法。
@Override
public void importDictData(MultipartFile file) {
}
复制代码
不过目前里面还写不了,因为需要先去写一个监听器。
public class DictListener extends AnalysisEventListener {
private DictMapper dictMapper;
public DictListener(DictMapper dictMapper) {
this.dictMapper = dictMapper;
}
// 一行一行读取
@Override
public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {
// 调用方法,添加到数据库表里
Dict dict = new Dict();
// dictEeVo 转换成 dict
BeanUtils.copyProperties(dictEeVo, dict);
dictMapper.insert(dict);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
复制代码
注意这里面的一个细节,因为在invoke
方法中,一行行读取后,我需要把这每行的数据添加到数据库中,那么自然需要用到dictMapper
。
那么我这个监听器里如何才可以支持传入dictMapper
呢?其中一个方法就是通过有参构造方法来注入:
private DictMapper dictMapper;
public DictListener(DictMapper dictMapper) {
this.dictMapper = dictMapper;
}
复制代码
现在监听器完成,继续完成importDictData
方法:
@Override
public void importDictData(MultipartFile file) {
try {
EasyExcel.read(file.getInputStream(), DictEeVo.class, new DictListener(baseMapper)).sheet().doRead();
} catch (IOException e) {
e.printStackTrace();
}
}
复制代码
new DictListener(baseMapper))
这里在传入监听器的时候里面就要带上dictMapper
,这里放的是baseMapper
也可以。
2. 实现前端整合
添加导入按钮,绑定@click
调用上传方法。
导入
复制代码
点击导入后跳出对话框,增加友好度。
:multiple
: 表示是否上传多个文件,这里用单个
*:on-success
: 文件上传成功会调用的方法
:action
:请求的接口路径
对应里面的方法:
//导入数据字典
importData() {
this.dialogImportVisible = true
},
//上传成功调用
onUploadSuccess() {
//关闭弹框
this.dialogImportVisible = false
//刷新页面
this.getDictList(1)
},
复制代码
准备一份数据测试一下:
上传成功。
查看数据库里数据正确。