当前位置:网站首页>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;
}边栏推荐
- [offer78] merge multiple ordered linked lists
- (四)R语言的数据可视化——矩阵图、柱状图、饼图、散点图与线性回归、带状图
- Office提示您的许可证不是正版弹框解决
- Database table splitting strategy
- Knowledge system of digital IT practitioners | software development methods -- agile
- Affichage du changement de valeur du Buff de gain de l'interface graphique de défaillance
- (the first set of course design) sub task 1-5 317 (100 points) (dijkstra: heavy edge self loop)
- idea中好用的快捷键
- Solution to the problem of automatic login in Yanshan University Campus Network
- [leetcode19]删除链表中倒数第n个结点
猜你喜欢

Liste des boucles de l'interface graphique de défaillance

Fairygui gain buff value change display

数据库课程设计:高校教务管理系统(含代码)

MySQL takes up too much memory solution

Unity3d makes the registration login interface and realizes the scene jump

Easy to use shortcut keys in idea

程序设计大作业:教务管理系统(C语言)

Combination of fairygui check box and progress bar

Force buckle 1189 Maximum number of "balloons"

Pytorch: tensor operation (I) contiguous
随机推荐
Game 280 weekly
By v$rman_ backup_ job_ Oracle "bug" caused by details
Unity3d camera, the keyboard controls the front and rear left and right up and down movement, and the mouse controls the rotation, zoom in and out
[Leetcode15]三数之和
FairyGUI簡單背包的制作
Intermediate use tutorial of postman [environment variables, test scripts, assertions, interface documents, etc.]
[offer18] delete the node of the linked list
Single chip Bluetooth wireless burning
(4) Data visualization of R language -- matrix chart, histogram, pie chart, scatter chart, linear regression and strip chart
FairyGUI按钮动效的混用
Latex learning
First use of dosbox
Naive Bayesian theory derivation
[Nodejs] 20. Koa2 onion ring model ----- code demonstration
Matlab读取GNSS 观测值o文件代码示例
Office prompts that your license is not genuine pop-up box solution
[899] ordered queue
FairyGUI增益BUFF數值改變的顯示
KF UD分解之伪代码实现进阶篇【2】
编译原理:源程序的预处理及词法分析程序的设计与实现(含代码)