需求:最近在做日志管理,需要将日志信息导出为Excel文件,即做一个导出功能。
环境:
前端:vue + element
后端:springboot
依赖/启动器:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
前端界面如图所示:
ok,我们先看看前端传过去的数据是什么类型?
这不就是一个对象数组嘛。ok,那咱后端就用对象数组来接收!
前端axios请求代码:
//this.$httpUrl相当于localhost:8080; this.multipleSelection是你要导出的数据
this.$axios.post(this.$httpUrl+'/log/export',this.multipleSelection).then(res=>res.data).then(res=>{
if(res.code == 200){
this.$message.success("导出成功!");
this.loadLog();
}else{
this.$message.error("执行失败!");
}
})
后端代码:
public Result export(@RequestBody List<Log> logList){
// 定义一个文件名
Date date = DateUtil.date();
String nowTime = DateUtil.format(date, "yyyyMMddHHmmssSSS");
String fileName = nowTime+".xls";
//申请一个表格(想象中就是一个excel)用来存日志数据
List<Map<String,Object>> logs = CollUtil.newArrayList();
for (Log log : logList){
//使用LinkedHashMap可让导出顺序不变
Map<String, Object> map = new LinkedHashMap<>();
map.put("账号",log.getNo());
map.put("IP",log.getIp());
map.put("描述",log.getDescription());
map.put("创建时间",log.getCreateTime());
logs.add(map);
}
//写入的路径
ExcelWriter writer = ExcelUtil.getWriter("E:/xxx/xxx/file/log/"+fileName);
//定义标题名为日志信息;3:代表占3个单元格
writer.merge(3,"日志信息");
writer.write(logs,true);
writer.close();
return Result.suc();
}
ok,启动运行去你的定义的路径下查看,即有一张刚刚导出的.xls表
小功能完结撒花~