SpringBoot集成EasyExcel导入导出excel表格
程序员文章站
2022-03-15 16:34:26
...
1.demo
1.引入依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
2.导出数据
1.创建实体类
这个实体类不仅导出在用,导入也需要使用
@Data
public class UserData {
/**
* value写的时候用,表示列名
* index读的时候用,表示读哪一列
*/
@ExcelProperty(value = "用户编号", index = 0)
private int id;
@ExcelProperty(value = "用户名称", index = 1)
private String userName;
}
2.测试导出
public static void main(String[] args) {
//构建list集合
List<UserData> list = new ArrayList<>();
for (int i = 0; i <= 10; i++) {
UserData userData = new UserData();
userData.setId(i);
userData.setUserName("lucy" + i);
list.add(userData);
}
//设置excel文件路径和名称
String fileName = "E:\\01.xlsx";
//调用方法实现写操作
EasyExcel.write(fileName, UserData.class).sheet("用户信息")
.doWrite(list);
}
3.导入数据
1.创建监听类
对导入的数据如何处理,主要在监听器中实现
/**
* 读取exceal时,需要实现该监听器,一行一行读取
*/
public class ExcelListener extends AnalysisEventListener<UserData> {
/**
* 一行一行读取excel内容,从第二行开始,第一行表头略过
*
* @param userData
* @param analysisContext
*/
@Override
public void invoke(UserData userData, AnalysisContext analysisContext) {
System.out.println(userData);
}
/**
* 读取之后执行的方法
*
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
/**
* 该方法可实现或者不实现
* 用来读取表头
*
* @param headMap
* @param context
*/
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表头信息:" + headMap);
}
}
2.测试导入
public class TestRead {
public static void main(String[] args) {
//读取文件路径
String fileName = "E:\\01.xlsx";
//调用方法实现读取操作
EasyExcel.read(fileName, UserData.class, new ExcelListener()).sheet().doRead();
}
}
2.实战
1.导出
1.controller层
/**
* 导出数据字典接口
*
* @param response
* @return
*/
@GetMapping("exportData")
public void exportDict(HttpServletResponse response) {
dictService.exportDictData(response);
}
2.service层
导出excel使用的实体类和从数据库查询的实体类不一致,需要进行转换
/**
* 导出数据字典
* @param response
*/
void exportDictData(HttpServletResponse response);
@Override
public void exportDictData(HttpServletResponse response) {
//设置下载信息
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = "dict";
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//查询数据
List<Dict> dictList = baseMapper.selectList(null);
//数据转换dict -> dictVo
List<DictEeVo> dictEeVoList = new ArrayList<>();
if (!CollectionUtils.isEmpty(dictList)) {
dictEeVoList = dictList.stream().map(dict -> {
DictEeVo dictEeVo = new DictEeVo();
BeanUtils.copyProperties(dict, dictEeVo);
return dictEeVo;
}).collect(Collectors.toList());
}
//调用方法进行写操作
try {
EasyExcel.write(response.getOutputStream(), DictEeVo.class).sheet("dict").doWrite(dictEeVoList);
} catch (IOException e) {
e.printStackTrace();
}
}
2.导入
1.controller层
/**
* 导入数据字典接口
*
* @return
*/
@PostMapping("importData")
public Result importDict(MultipartFile file) {
dictService.importDictData(file);
return Result.ok();
}
2.service层
/**
* 导入数据字典
* @param file
*/
void importDictData(MultipartFile file);
@Override
public void importDictData(MultipartFile file) {
try {
EasyExcel.read(file.getInputStream(),DictEeVo.class,new DictListener(baseMapper)).sheet().doRead();
} catch (IOException e) {
e.printStackTrace();
}
}
3.监听器
这里没有将监听器交给Spring容器进行管理,而是采用构造方法注入mapper
public class DictListener extends AnalysisEventListener<DictEeVo> {
//采用构造器方式注入mapper
private DictMapper dictMapper;
public DictListener(DictMapper dictMapper) {
this.dictMapper = dictMapper;
}
@Override
public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {
//调用方法添加数据库
Dict dict = new Dict();
BeanUtils.copyProperties(dictEeVo,dict);
dictMapper.insert(dict);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
参考:
https://www.bilibili.com/video/BV1V5411K7rT?p=60
推荐阅读
-
Springboot上传excel并将表格数据导入或更新mySql数据库的过程
-
【springboot+easypoi】一行代码搞定excel导入导出
-
SpringBoot整合EasyExcel实现文件导入导出
-
IDE下的springboot+mybatis学习笔记(5)-------Excel表格的批量导入(内附图片也没问题)
-
SpringBoot集成EasyExcel实现Excel导入的方法
-
使用easypoi 将数据库数据导出 以及将Excel表格数据导入数据库 第五版
-
SpringBoot引用阿里easyexcel,Excel导出返回浏览器下载
-
Springboot+Poi导入Excel表格实现过程详解
-
Springboot2整合easypoi实现导入导出、OSS图片导出到Excel
-
DEV GridControl导入导出Excel文件 - 简单表格数据导入