• java使用poi-tl模版引擎导出word之列表循环数据渲染



    poi-tl模版引擎中,如果区块对的值是一个非空集合,区块中的文档元素会被迭代渲染一次或者N次,这取决于集合的大小,类似于foreach语法。

    1.模版制作

    在静态资源目录下resources/static/templates新建exportWord.docx,编写以下模版内容:

    在这里插入图片描述

    2.开启spring表达式

    (1)引入依赖

    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-expressionartifactId>
        <version>5.3.18version>
    dependency>
    

    (2)代码中开启表达式

    ConfigureBuilder builder = Configure.builder();
    // 开启spring表达式
    builder.useSpringEL();
    

    3.编写关键代码接口

    @GetMapping("/exportWord")
    public void exportWord(HttpServletResponse response) throws FileNotFoundException {
        //存放数据,也就是填充在word里面的值
        Map<String, Object> params = new HashMap<>();
        params.put("title","测试使用poi-tl模版导出word");
    
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        map.put("a","测试");
        map.put("b","米");
        map.put("c","201312");
        list.add(map);
        Map<String, Object> map1 = new HashMap<>();
        map1.put("a","测试2");
        map1.put("b","千米");
        map1.put("c","2012312");
        list.add(map1);
    
        params.put("list",list);
    
        ConfigureBuilder builder = Configure.builder();
        // 开启spring表达式
        builder.useSpringEL();
    
        // 或模板在静态资源的相对路径
        File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));
        File templateFile = new File(rootFile, "/static/templates/exportWord.docx");
        //jar包获取不到文件路径`
        //URLDecoder.decode() 解决获取中文名称文件路径乱码
        String templatePath = URLDecoder.decode(templateFile.getPath());
        //生成文件名
        String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis();
        // 导出wold
        try {
            // 导出Word文档为文件
            XWPFTemplate template = XWPFTemplate.compile(templatePath,builder.build()).render(params);
            // 将导出的Word文件转换为流
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition","attachment;filename=\""+fileName+".docx"+"\"");
            // HttpServletResponse response
            OutputStream out = response.getOutputStream();
            BufferedOutputStream bos = new BufferedOutputStream(out);
            template.write(bos);
            bos.flush();
            out.flush();
            // 最后不要忘记关闭这些流。
            PoitlIOUtils.closeQuietlyMulti(template, bos, out);
        } catch (Exception e) {
            System.out.println("导出Word文档时出现异常:" + e.getMessage());
        }
    }
    

    4. 导出结果

    在这里插入图片描述

  • 相关阅读:
    现在学习软件测试好找工作吗
    javascript开发五指棋和围棋
    基于Java的大学生兼职论坛管理系统设计与实现(源码+lw+部署文档+讲解等)
    【二】2D测量 Metrology——add_metrology_object_circle_measure()算子
    FilterRegistrationBean能不能排除指定url
    大数据-131 - Flink CEP 案例:检测交易活跃用户、超时未交付
    Java基础入门·File类的使用
    2022软件测试面试题 最新字节跳动50道真题面试题 刷完已拿下15k 附讲解+答疑
    详解设计模式:代理模式
    强化学习:Actor-Critic、SPG、DDPG、MADDPG
  • 原文地址:https://blog.csdn.net/whs15193553607/article/details/140300488