【快捷】excel模板导出占位符

2024-09-01  本文已影响0人  小胖学编程

有时候需要导出的excel文件格式比较复杂。此时需要使用到表有导出。

  1. 在工程的resource目录新增excel模板(如果excel模板发生表更,需要改一下模板名字,否则不能push到git仓库,导致无法部署在服务器上)
模板样式.png
  1. [快捷]Java读取resources目录下的文件为InputStream将resources目录下的文件读取为流。

  2. 编码实现

@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);
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读