springboot下使用freemarker导出复杂的excel模板传给前端流

用easypoi遇到了一些问题,然后该用freemarker

我是使用的springboot集成的!

先看一下我的模板有多么复杂

springboot下使用freemarker导出复杂的excel模板传给前端流_第1张图片

 先说一下步骤

1.先导入freemarker的依赖


    
      org.springframework.boot
      spring-boot-starter-freemarker
    
    
      freemarker
      freemarker
      2.3.8
    
    

2.将你的模板文件添加相应的字段

springboot下使用freemarker导出复杂的excel模板传给前端流_第2张图片

然后另存为xml格式,然后利用xml格式化工具将其格式化,你就会得到如下的

springboot下使用freemarker导出复杂的excel模板传给前端流_第3张图片

解释一下这里的数据,一个list就是你后台请求数据返回的一个list,然后这样写语法,freemarker就会遍历,有多条,循环出来的就是多条数据

这是正确的,你需要判空,需要加!,这都是freemarker的语法,这里贴一个freemarker的模板语法网址freemarker模板网址

springboot下使用freemarker导出复杂的excel模板传给前端流_第4张图片

然后我就直接贴后台代码了

    /** 数据类型为{@value} .*/
    public static final String UTF_8 = "UTF-8";

    /**
     * 构造方法.
     */
    private FreemarkerExcelUtil() {
    }

    /**
     * @param dataMap 传入的数据
     * @param valueName 存储名
     * @return file
     */
    public static byte[] createExcel(final Map dataMap,
                                   final String valueName) throws IOException, TemplateException {
        final Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        configuration.setDefaultEncoding(UTF_8);
        configuration.setClassForTemplateLoading(FreemarkerExcelUtil.class, "/export-model");
        final Template template = configuration.getTemplate(valueName);
        final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        final Writer w = new OutputStreamWriter(outputStream, UTF_8);
        template.process(dataMap, w);
        w.close();
        return outputStream.toByteArray();

    }
    /** 数据类型为{@value} .*/
    public static final String UTF = "UTF-8";


    /**
     * 调用创建excel帮助类,来创建excel.
     * @param request 请求
     * @param response 响应
     * @param dataMap 传过来的map
     * @param valueName 存储名
     * @param fileName 文件名
     */
    @Override
    public void excelUtil(final HttpServletRequest request,
                          final HttpServletResponse response,
                          final Map dataMap,
                          final String valueName,
                          final String fileName) throws IOException, TemplateException {
        byte[] file = FreemarkerExcelUtil.createExcel(dataMap, valueName);
        try (OutputStream out = response.getOutputStream();) {
            request.setCharacterEncoding(UTF);
            //调用创建excel帮助类,其中LeaderHomepage.ftl为模板名称  路径export-model/LeaderHomepage.ftl
            response.setCharacterEncoding(UTF);
            response.setContentType("application/msexcel");
            response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", UTF));
            out.write(file);
            out.flush();
        }
    }

最后贴一个模板在idea项目中存放的位置,注意是ftl格式的,你将xml加完freemarker的语法就可以改文件的后缀为.ftl了。

springboot下使用freemarker导出复杂的excel模板传给前端流_第5张图片

我之前百度的做法,传给前段的是xml,前端解析不了,做好是二进制,但是后来改成了这样。前台就可以解析了

你可能感兴趣的:(freemarker,freemarker,excel,xml,java)