@Controller ///controller层
@RequestMapping("/export") ///Request请求url
public class ExportController {
@ResponseBody ///Response响应
@GetMapping("build/{project_id}") ///get请求url
public Object build(@PathVariable Integer project_id,HttpServletResponse re) { ///声明传参和 http 请求
///new ExcelWriter(InputStream in, boolean xls) 声明 excel 模板,模板是 xls格式 ,boolean 为 true;模板不是 xls 格式,boolean 为 false ,此处模板格式为 xlsx ,所以 boolean 为false 。
///模板位置:sts 中,src/main/java 中存 java 文件,src/main/resources 中存资源文件,excel模板存在资源文件中 ,存的位置是/static/template/buildExport.xlsx
///Class.getResourceAsStream(String name) 方法读取 src/main/resources 中的文件,并返回为 InputStream
ExcelWriter ex = new ExcelWriter(ExportController.class.getResourceAsStream("/static/template/buildExport.xlsx"),false);
Map<String, Object> infos = new HashMap<>();
infos.put("tablename", "excel导出"); ///声明 excel 表头名称
List<Excel> excelist = getByProject(project_id);
List<Map<String,Object>> maplist = new LinkedList<>(); ///将 excelist 中相关参数 按需求进行格式转化,添加到 maplist 中
if(excelist .size() > 0) {
excelist .forEach(b -> { ///将 build 中相关参数格式化后添加到 bmap
Map<String,Object> bmap = new HashMap<>();
maplist.add(bmap); ///bmap添加到maplist
bmap.put("name", b.getName());
bmap.put("created_at", b.getCreated_at());
bmap.put("ordernumber", "Build_" + b.getOrdernumber());
});
}
infos.put("excellist", maplist);
ex.setMarker(infos);
byte[] bytes = ex.getBytes();
// 设置http协议头部
HttpHeaders headers = new HttpHeaders();
// 设置文件名
String fileName = "";
try {
fileName = new String((proservice.getById(project_id).getName() + "导出.xlsx").getBytes("UTF-8"), "iso-8859-1");// 为了解决中文名称乱码问题
} catch (Exception e) {
e.printStackTrace();
}
///设置http协议头部信息
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
re.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
return bytes; ///返回字节流
}