有时候需要导出的excel文件格式比较复杂。此时需要使用到表有导出。
- 在工程的resource目录新增excel模板(如果excel模板发生表更,需要改一下模板名字,否则不能push到git仓库,导致无法部署在服务器上)。
[快捷]Java读取resources目录下的文件为InputStream将resources目录下的文件读取为流。
编码实现
@Data
public class ExamInfo {
//序号
@ExcelProperty(value = {"${index}"})
private Long index;
//题型
@ExcelProperty(value = {"${type}"})
private String type;
//题干
@ExcelProperty(value = {"${content}"})
private String content;
}
@ResponseBody
@GetMapping("/export")
public void export(@RequestParam String docName, HttpServletResponse response) {
List<ExamInfo> examInfoList = //获取到集合列表
try {
//读取模板文件流
InputStream template =
OpenApiController.class.getClassLoader().getResourceAsStream("excel/template1.xlsx");
response.setCharacterEncoding("UTF-8");
//文件导出到响应
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
String fileName = "exam" + System.currentTimeMillis() + ".xlsx";
fileName = new String(fileName.getBytes(), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
EasyExcel.write(response.getOutputStream(), ExamInfo.class)
.withTemplate(template)
.needHead(false)
.sheet()
.doFill(examInfoList); //注意,此处使用doFill()的方法
} catch (Exception e) {
throw new BusinessException(e);
}
}