数据填充
easyexcel官方文档: https://www.yuque.com/easyexcel/doc/easyexcel
填充的模板模板下载地址:https://download.csdn.net/download/qq_44732146/20926682
{}里面的名称要和Map里面的键名对上
下载好之后放在resources
目录下
返回对象Result
/**
* @author zhubayi
* 结果封装对象
*/
public class Result implements Serializable {
private Integer code=200;
private boolean flag;//执行结果,true为执行成功 false为执行失败
private String message;//返回提示信息,主要用于页面提示信息
private Object data;//返回数据
public Result(boolean flag, String message) {
super();
this.flag = flag;
this.message = message;
}
public Result(boolean flag, String message, Object data) {
this.flag = flag;
this.message = message;
this.data = data;
}
public Result(){}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
实体类HotSetmeal
@Data
@AllArgsConstructor
@NoArgsConstructor
public class HotSetmeal{
private String setmealName;
private Long setmealCount;
private BigDecimal proportion;
private String remark;
}
controller
@RestController
@RequestMapping("/report")
public class ReportController {
/**
* 导出Excel报表
* @return
*/
@GetMapping("/exportBusinessReport")
public Result exportBusinessReport(HttpServletResponse response){
try {
HashMap<String, Object> testMap = new HashMap<>();
testMap.put("reportDate","2021-08-09");
testMap.put("todayNewMember",10);
testMap.put("totalMember",15);
testMap.put("thisWeekNewMember",17);
testMap.put("thisMonthNewMember",20);
testMap.put("todayOrderNumber",14);
testMap.put("thisWeekOrderNumber",18);
testMap.put("thisMonthOrderNumber",30);
testMap.put("todayVisitsNumber",20);
testMap.put("thisWeekVisitsNumber",22);
testMap.put("thisMonthVisitsNumber",33);
ArrayList<HotSetmeal> hotSetmeals = new ArrayList<>();
hotSetmeals.add(new HotSetmeal("入职无忧体检套餐(男女通用)",4L,new BigDecimal(0.5),"入职体检套餐"));
hotSetmeals.add(new HotSetmeal("测试",4L,new BigDecimal(0.5),"测试套餐"));
//开始写
//EasyExcel.write("test.xlsx").withTemplate("report_template.xlsx").sheet().doFill(businessReport);
//通过输出流进行文件下载
ServletOutputStream out = response.getOutputStream();
//设置文件类型
response.setContentType("application/vnd.ms-excel");
//设置编码格式
response.setCharacterEncoding("utf-8");
// https://www.jb51.net/article/30565.htm Content-Disposition 使用说明
response.setHeader("Content-disposition", "attachment;filename=" + "report" + ".xlsx");
// ResourceUtils.getFile("classpath:report_template.xlsx") 获取resources目录下的文件
ExcelWriter excelWriter = EasyExcel.write(out).withTemplate( ResourceUtils.getFile("classpath:report_template.xlsx")).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
//把数据填充进去
excelWriter.fill(testMap, writeSheet);
//填充集合
excelWriter.fill(hotSetmeals,writeSheet);
// 千万别忘记关闭流
excelWriter.finish();
out.flush();
out.close();
return new Result(true, MessageConstant.GET_BUSINESS_REPORT_FAIL,response);
} catch (Exception e) {
e.printStackTrace();
return new Result(false, MessageConstant.GET_BUSINESS_REPORT_FAIL,null);
}
}
}
测试:http://127.0.0.1:你的端口/report/exportBusinessReport
打开它
可以看到数据都填充了进去。
feign远程调用下载文件
远程调用接口ReportFeignService
package com.zhubayi.mobile.feign;
import com.zhubayi.common.entity.Result;
import feign.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @author zhubayi
* 统计报表
*/
@FeignClient(name = "health-provider")
public interface ReportFeignService {
//导出数据
@GetMapping("/report/exportBusinessReport")
Response exportBusinessReport();
}
远程调用的controller类
package com.zhubayi.mobile.controller;
import com.zhubayi.common.entity.Result;
import com.zhubayi.mobile.feign.ReportFeignService;
import feign.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
@RestController
@RequestMapping("/api/report")
public class ReportController {
@Autowired
private ReportFeignService reportFeignService;
@GetMapping("/exportBusinessReport")
public void exportBusinessReport(HttpServletResponse response) throws IOException {
Response downResponse = reportFeignService.exportBusinessReport();
ServletOutputStream outputStream = response.getOutputStream();
//设置文件类型
response.setContentType("application/vnd.ms-excel");
//设置编码格式
response.setCharacterEncoding("utf-8");
// https://www.jb51.net/article/30565.htm Content-Disposition 使用说明
response.setHeader("Content-disposition", "attachment;filename=" + "report" + ".xlsx");
InputStream inputStream =null;
try {
Response.Body body = downResponse.body();
inputStream = body.asInputStream();
byte[] bytes = new byte[1024];
int len = 0;
while ((len = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, len);
}
}catch (Throwable e){
e.printStackTrace();
}finally {
inputStream.close();
outputStream.flush();
outputStream.close();
}
}
}
调用这个接口即可进行下载。