当前位置:网站首页>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;
}
边栏推荐
- Teach you to release a DeNO module hand in hand
- About using @controller in gateway
- Postman 中级使用教程【环境变量、测试脚本、断言、接口文档等】
- [Nodejs] 20. Koa2 onion ring model ----- code demonstration
- [leetcode622] design circular queue
- Learning notes of JS variable scope and function
- Fairygui joystick
- By v$rman_ backup_ job_ Oracle "bug" caused by details
- ESP8266连接onenet(旧版MQTT方式)
- InnoDB dirty page refresh mechanism checkpoint in MySQL
猜你喜欢
Halcon knowledge: gray_ Tophat transform and bottom cap transform
JS function promotion and declaration promotion of VaR variable
Problèmes avec MySQL time, fuseau horaire, remplissage automatique 0
FairyGUI复选框与进度条的组合使用
(4) Data visualization of R language -- matrix chart, histogram, pie chart, scatter chart, linear regression and strip chart
FairyGUI循环列表
idea中导包方法
MySQL time, time zone, auto fill 0
Générateur d'identification distribué basé sur redis
In 2020, the average salary of IT industry exceeded 170000, ranking first
随机推荐
Fairygui gain buff value change display
数据库课程设计:高校教务管理系统(含代码)
Halcon knowledge: gray_ Tophat transform and bottom cap transform
NovAtel 板卡OEM617D配置步骤记录
MySQL takes up too much memory solution
Introduction to the daily practice column of the Blue Bridge Cup
Latex learning
(1) Introduction Guide to R language - the first step of data analysis
KF UD分解之UD分解基础篇【1】
【RTKLIB 2.4.3 b34 】版本更新简介一
(五)R语言入门生物信息学——ORF和序列分析
Fairygui joystick
ORA-02030: can only select from fixed tables/views
程序设计大作业:教务管理系统(C语言)
Prove the time complexity of heap sorting
Special palindromes of daily practice of Blue Bridge Cup
(3) Introduction to bioinformatics of R language - function, data Frame, simple DNA reading and analysis
Unity3D,阿里云服务器,平台配置
Postman 中级使用教程【环境变量、测试脚本、断言、接口文档等】
记一次云服务器被密码爆破的经历——关小黑屋、改密码、改端口