当前位置:网站首页>Excel导入,导出功能实现
Excel导入,导出功能实现
2022-07-06 09:18:00 【Demon Lord(大魔王)】
日常在做后台系统的时候会很频繁的遇到Excel导入导出的问题,下面就流程写出
1.依赖 alibaba的easyexcel
<groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId>
2.注解
3.导入 isCovered是是否覆盖的参数,不需要这个功能可以忽略
@PostMapping("/import-dept")
@ApiOperationSupport(order = 13)
@ApiOperation(value = "导入部门", notes = "传入excel")
public void importDept(@RequestParam(value = "file") MultipartFile file, @RequestParam(value = "isCovered") String isCovered) throws IOException {
deptService.importDept(file ,isCovered);
}
Service层
@Transactional(rollbackFor = Exception.class)
@Override
public void importDept(MultipartFile file, String isCovered) throws IOException {
//取流
InputStream inputStream = file.getInputStream();
//转为定义的excel实体集合-根据部门分组
List<DeptExcel> deptExcelList = EasyExcel.read(inputStream).head(DeptExcel.class)
// 设置sheet,默认读取第一个
.sheet()
// 设置标题所在行数
.headRowNumber(1)
.doReadSync();
List<Dept> deptList = new ArrayList<>();
//循环字段翻译,就忽略了
deptExcelList.forEach(deptExcel -> {
Dept dept1 = new Dept();
if (StringUtil.isNotBlank(deptExcel.getParentname())) {
if (Objects.nonNull(DeptCache.getDeptByName(deptExcel.getParentname()))) {
dept1.setParentId(DeptCache.getDeptByName(deptExcel.getParentname()).getId());
}
}
dept1.setVcode(deptExcel.getVcode());
dept1.setVname(deptExcel.getVname());
deptList.add(dept1);
});
if (isCovered.equals("0")) {
deptList.forEach(dept -> {
Long id = this.getOne(Wrappers.<Dept>query().lambda().eq(Dept::getVcode, dept.getVcode())).getId();
if (id != null) {
dept.setId(id);
this.saveOrUpdate(dept);
} else {
this.saveOrUpdate(dept);
}
});
} else {
deptList.forEach(this::saveOrUpdate);
}
}
4.导出
/**
* 导出部门
*/
@GetMapping("/export-dept")
@ApiOperationSupport(order = 14)
@ApiOperation(value = "导出部门", notes = "传入user")
public void exportDept(@ApiIgnore @RequestParam Map<String, Object> dept, HttpServletResponse response) {
QueryWrapper<Dept> queryWrapper = Condition.getQueryWrapper(dept, Dept.class);
List<DeptExcel> list = deptService.exportDept(queryWrapper);
ExcelUtil.export(response, "导出部门" + DateUtil.time(), "导出部门表", list, DeptExcel.class);
}
//写的工具类 就不全发出 自己拼进去
private static <T> void export(HttpServletResponse response, String fileName, String sheetName, List<T> dataList, Class<T> clazz) {
try {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding(Charsets.UTF_8.name());
fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name());
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(dataList);
} catch (Throwable var6) {
throw var6;
}
}
Service层
@Override
public List<DeptExcel> exportDept(QueryWrapper<Dept> queryWrapper) {
List<Dept> deptExcels = this.list(queryWrapper);
List<DeptExcel> deptExcelList = new ArrayList<>();
//翻译部分略过
deptExcels.forEach(dept1 -> {
DeptExcel deptExcel = new DeptExcel();
if (dept1.getParentId() != null) {
if (Objects.nonNull(DeptCache.getDept(dept1.getParentId()))) {
deptExcel.setParentname(DeptCache.getDept(dept1.getParentId()).getVname());
}
}
deptExcel.setVname(dept1.getVname());
deptExcel.setVcode(dept1.getVcode());
deptExcelList.add(deptExcel);
});
return deptExcelList;
}
边栏推荐
- 关于Gateway中使用@Controller的问题
- [Nodejs] 20. Koa2 onion ring model ----- code demonstration
- Esp8266 connect onenet (old mqtt mode)
- Classification, understanding and application of common methods of JS array
- FairyGUI复选框与进度条的组合使用
- FairyGUI按钮动效的混用
- Common DOS commands
- [Offer29] 排序的循环链表
- The master of double non planning left the real estate company and became a programmer with an annual salary of 25W. There are too many life choices at the age of 25
- (3) Introduction to bioinformatics of R language - function, data Frame, simple DNA reading and analysis
猜你喜欢
FairyGUI复选框与进度条的组合使用
Idea problem record
CUDA C programming authoritative guide Grossman Chapter 4 global memory
Fabrication d'un sac à dos simple fairygui
单片机蓝牙无线烧录
Unity场景跳转及退出
(3) Introduction to bioinformatics of R language - function, data Frame, simple DNA reading and analysis
Problèmes avec MySQL time, fuseau horaire, remplissage automatique 0
Esp8266 connect onenet (old mqtt mode)
2021.11.10汇编考试
随机推荐
JUC forkjoin and completable future
Mixed use of fairygui button dynamics
MySQL performance tuning - dirty page refresh
Idea problem record
Gateway 根据服务名路由失败,报错 Service Unavailable, status=503
[Offer29] 排序的循环链表
Fairygui character status Popup
Game 280 weekly
第一人称视角的角色移动
Force buckle 1189 Maximum number of "balloons"
The master of double non planning left the real estate company and became a programmer with an annual salary of 25W. There are too many life choices at the age of 25
Unity3d, Alibaba cloud server, platform configuration
地球围绕太阳转
Database table splitting strategy
Office提示您的许可证不是正版弹框解决
(the first set of course design) sub task 1-5 317 (100 points) (dijkstra: heavy edge self loop)
Mysql database index
VLSM variable length subnet mask partition tips
Redis based distributed ID generator
Fabrication d'un sac à dos simple fairygui