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

news2024/9/30 1:44:29

目录

  • 1.模版制作
  • 2.开启spring表达式
  • 3.编写关键代码接口
  • 4. 导出结果

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

1.模版制作

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

在这里插入图片描述

2.开启spring表达式

(1)引入依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>5.3.18</version>
</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. 导出结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1913536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

制作电子名片的小程序系统源码 快速生成电子名片

在当今数字化时代&#xff0c;传统的纸质名片已逐渐被智能电子名片所取代。电子名片小程序作为一种基于微信生态的创新名片交换方式&#xff0c;凭借其便捷性、高效性和环保性&#xff0c;成为了众多商务人士的首选。小编分享一个制作电子名片的小程序系统源码&#xff0c;无忧…

【pyqt-实训训练LOG】串口助手

串口助手 前言一、ui设计二、ui的控件命名三、ui转py使用类的方法【扩展】使用ui文件导入&#xff01;P7的小错误解决办法 总结 前言 我的惯例就是万物之始&#xff0c;拜见吾师&#x1f970;⇨pyqt串口合集 最开始的时候我想的是&#xff0c;学了那么久的pyqt&#xff0c;我…

逻辑芯片:现代电子技术的基石

在现代科技飞速发展的时代&#xff0c;逻辑芯片作为集成电路的重要组成部分&#xff0c;已经渗透到我们生活的每一个角落&#xff0c;从计算机到智能手机&#xff0c;从通信设备到工业自动化系统&#xff0c;无一不彰显着其不可或缺的作用。本文将深入探讨逻辑芯片的基本概念、…

如何判断一个js对象为数组类型

如何判断一个js对象为数组类型? 能想到的最常见的intanceof是吗?开始是这么认为,但是不是哈,看下面的解释,也没有太明白,暂且记住吧 综上,判断js对象为数组的两种方式 Array.isArray([]) // trueObject.prototype.toString.call([]) ‘[object Array]’ //true

凝思安全操作系统安装部署

原文链接&#xff1a;凝思安全操作系统安装部署 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于凝思安全操作系统安装部署的文章。凝思安全操作系统是一款注重安全和隐私保护的操作系统&#xff0c;适用于各种高安全性需求的场景。本文将详细介绍如何安装和部署…

速度太慢,跑个分试试:AI语言模型和API性能对比;开源的高质量PDF,DOC提取工具;斯坦福TTT代码实现

✨ 1: Artificial Analysis AI语言模型和API提供商的比较分析&#xff0c;帮助用户选择最佳方案。 Artificial Analysis 是一个专门独立分析AI语言模型和API提供商的平台&#xff0c;旨在帮助用户了解AI领域并选择最适合其需求的模型和API提供商。以下是该平台的主要内容和功…

一键掌握天气动态 - 基于Vue和高德API的实时天气查询

前言 本文将学习如何使用Vue.js快速搭建天气预报界面,了解如何调用高德地图API获取所需的天气数据,并掌握如何将两者有机结合,实现一个功能丰富、体验出色的天气预报应用 无论您是前端新手还是有一定经验,相信这篇教程都能为您带来收获。让我们一起开始这段精彩的Vue.js 高德…

VS安装Qt扩展工具

1-Visual Studio中安装QT插件 **插件下载地址&#xff1a;**http://download.qt.io/development_releases/vsaddin/ 关闭VS,双击下载的QT插件&#xff0c;默认安装即可&#xff1b; &#xff08;1&#xff09;配置Qt的MSVC编译器安装路径 打开Visual Studio&#xff0c;在菜单栏…

安装python2

参考&#xff1a; https://www.cnblogs.com/linjiangplus/p/13948593.html https://www.python.org/downloads/release/python-2718/

PolSARPro软件安装处理Sentinel1A数据(CSDN_20240707)

PolSARpro是由法国雷恩第一大学&#xff08;Universit de Rennes 1&#xff09;电子和电信学院教授Eric Pottier1等人带头开发的专门用于PolSAR(极化合成孔径雷达)、Pol-InSAR&#xff08;极化干涉合成孔径雷达&#xff09;、Pol-TomoSAR&#xff08;极化层析合成孔径雷达&…

k8s record 20240705

k8s 安全管理 request 是1g&#xff0c;你得不到要求&#xff0c;我就不创建了&#xff0c;这就是准入控制二次校验 SA就是serviceAccount。 内部是SA和 token, 外部用户进来就是 .kube/config文件 namespace下的是role&#xff0c;整个集群是 ClusterRole. 动作就是Binding li…

MySQL架构你了解多少?

MySQL是一个服务器-客户端应用&#xff0c;MySQL8.0服务器是由连接池、服务管理工具和公共组件、NoSQL接口、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。MySQL还为各种编程语言提供了一套用于外部程序访问服务器的连接器。整体架构图如下所示: MySQLConnectors:为…

前端直连小票打印机,前端静默打印,js静默打印解决方案

最近公司开发了一个vue3收银系统&#xff0c;需要使用小票打印机打印小票&#xff0c;但是又不想结账的时候弹出打印预览&#xff0c;找了很多方案&#xff0c;解决不了js打印弹出的打印预览窗口&#xff01; 没办法&#xff0c;自己写了一个winform版本的静默打印软件&#xf…

案例|水上水下一体化测量,为九寨沟精准把脉

​ 九寨沟&#xff0c;被誉为“人间仙境”&#xff0c;其湖群以独特的地理位置和优美的自然景观吸引着世界各地的游客&#xff0c;更是九寨沟生态系统中不可或缺的重要组成部分。因此&#xff0c;精准地掌握湖群的地形数据、水体分布及变化情况&#xff0c;能够揭示水下生态系…

基于Unity3D的发布第一个Rokid AR眼镜应用

发布AR眼镜Demo 一、发布配置二、快速开发第一个AR Demo场景1.创建新场景2.替换Main Camera3. 创建Capsule 三、打包apk应用四、将apk安装到Rokid Master Pro 眼镜1.WiFI-ADB连接AR Studio 与PC2.USB直连Rokid眼镜安装3.运行查看应用 五、Rokid AR系列教程 一、发布配置 UXR2.…

气膜场馆在恶劣天气下的结构稳定与安全保障—轻空间

气膜场馆作为一种创新的建筑形式&#xff0c;能够在恶劣天气条件下保持结构稳定和安全&#xff0c;广泛应用于体育场馆、展览馆等多种场景。轻空间将探讨气膜场馆在恶劣天气条件下如何确保其结构稳定性和安全性。 1. 高强度膜材 气膜场馆采用高强度膜材&#xff0c;如PVC或PVDF…

Halcon 拟合测量

* Measure 05: Code generated by Measure 05 *利用测量工具实现 *1采集图像 dev_close_window () read_image (Image, D:/Halcon_Study/gongjian.BMP) get_image_size (Image, Width, Height) dev_open_window (0, 0, Width / 2, Height / 2, black, WindowHandle) set_displa…

virtuoso:layout如何做flat修drc

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 有些drc在virtuoso layout中修更节省时间&#xff0c;比如遇到一些via array需要做删改时&#xff0c;发现工具把via array做成了一个cell&#xff0c;如图。 去改cell可能会影…

使用libguestfs挂载qcow2磁盘镜像

挂载qcow2磁盘镜像的第一种方法是使用 libguestfs&#xff0c;它提供了一系列工具来访问和编辑 VM 磁盘镜像。libguestfs 支持几乎所有类型的磁盘镜像&#xff0c;包括 qcow2。你可以像下面这样&#xff0c;在Linux上安装libguestfs工具集。 1、安装guestmount工具 在基于 De…

SpringCloudAlibaba Nacos配置中心与服务发现

目录 1.配置 1.1配置的特点 只读 伴随应用的整个生命周期 多种加载方式 配置需要治理 1.2配置中心 2.Nacos简介 2.1特性 服务发现与服务健康检查 动态配置管理 动态DNS服务 服务和元数据管理 3.服务发现 1.配置 应用程序在启动和运行的时候往往需要读取一些配置信…