填充word文档【Apache POI】

Java使用Apache POI动态生成Word文档实战:模板替换与表格填充 在Java后端开发中,动态生成格式规范的Office文档是常见的业务需求,尤其是在报表导出、合同生成等场景。Apache POI作为Java操作Microsoft Office格式文件的开源库,其核心原理是通过解析.docx文件的XML结构,将文档抽象为XWPFDocument、XWPFParagraph、XWPFRun等对象模型进行操作。这项技术的核心价值在于,它允许开发者在服务器端不依赖Office软件的情况下,以编程方式创建、读取和修改Word文档,实现了文档生成的自动化与批量化。通过预先设计包含占位 阅读详情

1. 引入依赖

<dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>5.2.3</version>
</dependency>

2. 示例代码

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TemplateUtils {

    public static void replacePlaceholder(XWPFDocument xwpfDocument, Map<String, String> dataMap) {
        for (XWPFParagraph paragraph : xwpfDocument.getParagraphs()) {
            replacePlaceholder(paragraph, dataMap);
        }
    }

    /**
     * 填充段落中的占位符
     */
    public static void replacePlaceholder(XWPFParagraph paragraph, Map<String, String> dataMap) {
        if (paragraph.getText().contains("$")) {
            for (XWPFRun run : paragraph.getRuns()) {
                String text = run.text();
                System.out.println(text);
                for (String key : dataMap.keySet()) {
                    String placeHolder = "${" + key + "}";
                    if (text.contains(placeHolder)) {
                        text = text.replace(placeHolder, dataMap.get(key));
                        run.setText(text, 0);
                    }
                }
            }
        }
    }
    

    /**
     * 填充表格中的占位符
     */
    public static void replacePlaceholderInTable(XWPFTable table, Map<String, String> dataMap) {
        for (XWPFTableRow row : table.getRows()) {
            for (XWPFTableCell tableCell : row.getTableCells()) {
                for (XWPFParagraph paragraph : tableCell.getParagraphs()) {
                    replacePlaceholder(paragraph, dataMap);
                }
            }
        }
    }


    public static void main(String[] args) throws Exception {
        // 准备数据
        Map<String, String> dataMap = prepareData();

        // 加载文件
        String docPath = "src/main/resources/doc/信息表.docx";
        FileInputStream fileInputStream = new FileInputStream(docPath);
        XWPFDocument xwpfDocument = new XWPFDocument(fileInputStream);

        // 填充段落
        List<XWPFParagraph> paragraphs = xwpfDocument.getParagraphs();
        System.out.println(paragraphs.size());
        for (XWPFParagraph paragraph : paragraphs) {
            replacePlaceholder(paragraph, dataMap);
        }

        // 填充表格
        // 表格的每个单元格,也是段落
        List<XWPFTable> tables = xwpfDocument.getTables();
        System.out.println(tables.size());
        for (XWPFTable table : tables) {
            replacePlaceholderInTable(table, dataMap);
        }


        FileOutputStream fileOutputStream = new FileOutputStream("src/main/resources/doc/out.docx");
        xwpfDocument.write(fileOutputStream);

        fileOutputStream.close();
        fileInputStream.close();
        xwpfDocument.close();
    }

    private static Map<String, String> prepareData() {
        Map<String, String> dataMap = new HashMap<>();

        dataMap.put("author", "荧");
        dataMap.put("createTime", LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));


        dataMap.put("name", "Tom");
        dataMap.put("age", "14");
        dataMap.put("gender", "男");
        dataMap.put("birth", "1940-01-01");

        dataMap.put("address", "北京");
        dataMap.put("workAddress", "上海");
        dataMap.put("mobile", "6570123");
        dataMap.put("phone", "13478965412");


        dataMap.put("petName", "jerry");
        dataMap.put("petAge", "10");
        dataMap.put("petGender", "男");
        dataMap.put("petBirth", "1940-01-01");
        return dataMap;
    }

}

3. 填充效果

填充前

在这里插入图片描述

填充后

在这里插入图片描述

poi创建word导出,创建excel导出 poi创建word文档和Excel文档创建word文档 创建word文档 这个是使用poi复制word的代码 public void word(HttpServletResponse resp){ Map<String,Object> map=new HashMap(16); map.put(“abc”,“这个是word里面需要替换的地方”); Properties prop=new Properties(); InputStream is=null; OutputStream out=null 阅读详情

相关推荐

使用Java和FreeMarker操作Word文档的实践指南

FreeMarker是一个强大的模板引擎,广泛应用于Java平台,用于生成文本输出,特别是HTML Web页面。本章将带您了解FreeMarker模板引擎的基础知识,包括它的工作原理、核心组件以及如何集成到项目中。Apache POI是一个开源的Java库,用于处理Microsoft Office文档格式。它提供了读取和写入Microsoft Office格式文件的API,例如Excel、Word、PowerPoint和Outlook等。

weixin_42509888的博客 1004

Java使用Apache POI向Word文档中填充数据

处理复杂文档时,需要根据文档的具体内容来确定需要处理哪些元素。Apache POI提供了丰富的API来操作Word文档的各种组成部分。通过组合使用这些API,可以实现对文档的全面控制,从而满足各种复杂的需求。务必注意,处理大型文档时,内存管理变得非常重要,因为加载整个文档到内存可能会消耗大量的资源。在处理完毕后,及时关闭流和文档对象是很重要的。

weixin_42564451的博客 2600

人工智能在高中教育中的应用现状剖析与挑战应对

人工智能在高中教育中的应用现状剖析与挑战应对

燕鹏 1338

使用Apache POI和POI-OOXML实现word模板文档自动填充功能

最近接到一个新的需求,用户创建好模板文件保存到模板库,然后使用在线文档编辑器打开模板时,将系统数据填充到模板文件并生成新的word文件,然后在线编辑,研究使用Apache POI和POI-OOXML实现了这个功能。

qq_47741012的博客 1476

微信聊天记录解密,必须是root的手机

手机上安装x-plore软件,将/data/data目录的相关EnMicroMsg.db auth_info_key_prefs.xml拷贝到/storge/emulated/0目录后才可以拷贝到电脑。路径:/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml。但是是加密过的 需要解密 解密密码生成规则是手机IMEI+微信UIN md5(32位小写)后的前7位。安卓手机要root测试版本微信要7或者8版本都可以。选择message表。

venus60的专栏 1005

PCL读取点云数据报错:Failed to find match for field ‘x‘/ ‘y‘/ ‘z‘.

原因:使用matlab生成的pcd文件,点云数据是双精度类型,pcl处理的点云数据是单精度类型。解决方案:使用matlab生成的点云坐标单精度化,然后在生成点云加以存储。

little_white138的博客 868

(六)智能化通知单生成:Apache POI进行Word文档数据填充

文档填充术:使用Apache POI实现Word字段精准数据填充 引言

weixin_59736343的博客 1519

PDF批量加水印 与 去除水印实践

我们可以给PDF加图片水印或文字水印,要去除图片水印,一般只需要删除最后一个图片对象即可。要去除文字水印,需要保证主体内容和文字水印在/Contents中位于不同的对象内,这样我们只需要删除文字水印对应的对象即可删除水印。而对于主体内容和文字水印已经混合在一个对象时,本文的提供的方法则无能为力,需要进一步深入分析PDF细节。

小小明-代码实体的专栏 2757

Java 动态生成 Word 文档:Apache POI 表格合并与数据填充实战

在 Java 后端开发中,生成 Word 文档是报表导出、合同生成等业务场景的常见需求。当文档结构不固定、表格行数依赖数据库数据、需要合并单元格或动态控制样式时,基于模板的静态替换往往力不从心,此时需要采用代码动态构建文档结构。Apache POI 是 Java 生态中最主流的 Office 文档处理库,其 XWPF 组件提供了对 docx 底层 XML 模型的完整封装,允许开发者以对象方式操作段落、表格、单元格与文本片段。本文从方案选型讲起,对比模板替换与纯代码生成的适用场景,并深入讲解 XWPF 的核心

weixin_33836874的博客 370

基于三轴加速度计的塑料水管泄漏振动检测技术全解析

在流体力学与结构动力学领域,管道振动分析是评估系统健康状态的关键技术。其基本原理在于,当管道内流体状态发生异常(如泄漏)时,会引发管壁产生特定的机械振动信号。这项技术的核心价值在于实现了对管道系统的非侵入式、在线监测,能够提前预警潜在故障,避免资源浪费与次生灾害。在智慧城市与智能水务等应用场景中,它对于保障供水管网安全、提升运维效率具有重要意义。本文聚焦于如何利用高精度的三轴加速度计,精准捕捉塑料水管因泄漏产生的微弱振动,并通过信号处理与机器学习算法,构建一套从数据采集到泄漏识别与定位的完整工程解决方案。

weixin_32239523的博客 407

ANSYS命令流黑箱揭秘:流体渗透压力载荷的七种收敛优化策略

本文深入解析ANSYS Workbench中流体渗透压力载荷的七种收敛优化策略,重点探讨接触探测点迭代逻辑、PPCN阈值动态调整及FPAT参数优化等关键技术。通过命令流示例和实战技巧,帮助工程师有效解决流体与结构相互作用仿真中的收敛难题,提升计算效率和精度。

weixin_29274337的博客 523

poi-tl实现对Word模板中复杂表格的数据填充

开发时, 我们有时需要进行word类型表格导出,而对于表格操作. 我们一般可能会倾向于使用 poi 进行操作. 但poi操作比较复杂,所以就在寻找一种可以快速将内容填充到表格中的工具. 而pot-tl 恰好满足了我们这一需求......

时间静止 5571

2026年1至9月武汉市房地产价格深度分析报告

本报告基于2026年1月至9月武汉市实际成交案例,从成交价格、区域分布、户型结构、价格走势等维度进行深度分析。数据来源包括武汉市住房保障和房屋管理局备案数据、主要中介机构成交记录及典型楼盘网签案例,覆盖全市15个行政区及主要功能板块。

王国平的博客 327

POI 依据word模板 替换 ${xxx}属性

maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>${poi.version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId>

Zxdth的博客 1928

OpenClaw与大语言模型(Claude/GPT/MiniMax)的集成架构与最优配置策略

摘要 本文探讨了OpenClaw框架与大语言模型(Claude/GPT/MiniMax)的集成架构与优化策略。大语言模型具有强大的自然语言处理能力,但集成面临API成本、响应延迟、上下文管理等挑战。OpenClaw采用分层架构设计,包括用户界面层、对话管理层、提示工程层、模型适配层和API调用层,支持多模型切换、智能对话管理和成本控制。系统通过模型适配层实现不同API的统一调用,并提供缓存、监控等优化机制。该集成方案能够充分发挥大语言模型的优势,为本地AI助理提供更智能的服务。

一键难忘的博客 1693

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JAVA中用POI操作word

需求描述:按照给定的word模板生成word文档,模板包含页眉 页脚 文档标题 表格数据 生成后的word效果如下图: 大概要做的效果就如上面的样子了,下面开始做吧。 一.使用apache的poi,在pom中加入maven依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> &l...

阿松哥哥2018的博客 3万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

如何将数据库里的数据显示在word模板上(poi实现)

   现有一需求,有一word模板,领导要求开发者能将从数据库查询出来得结果集显示在上面并提供用户下载此文档。   模板如下图,其中“@*@”是我使用变量特殊字符占位得,想法是将正确的结果集去替换这些参数。替换后的结果如下:代码实现:1:所需jar包如下:2:代码结构3:代码如下:注释部分为图片替换,本demo同样支持图片显示。这里的路径不要写错了,自己使用时候改为自己的(读取的是文件在电脑的位置...

七月的专栏 6523

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java 多格式 填充word模板

实现“java 多格式 填充word模板”教程 一、整体流程 为了帮助你理解如何实现“java 多格式 填充word模板”,我将整个流程拆分为以下几个步骤,并用表格展示: 步骤 操作 步骤一 读取word模板文件 步骤二 填充word模板不同格式的数据 步骤三 生成填充后的word文档 二、详细...

weixin_40194201的博客 449

SpringBoot-Poi-Word

SpringBoot-Poi-Word 不多解释看代码就明白了 先准备一个word模板 doc 和docx都行 给模板空值添加占位符 使用poi给占位置赋值 Maven <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>4.0.1</

weixin_45203607的博客 975

java根据word模板生成word文档_根据Word模板生成Word文件 (JAVA POI)

需求通过提前准备的word模板,渲染填充数据,生成新的加工好的word文件。(也试过使用Freemarker渲染数据,但是有个很大的弊端:使用Freemarker渲染的后文件会变大)用法POI的Maven依赖org.apache.poipoi3.8需要将模板参数设置成如下格式, 另存为word文档即可 直接放代码,仅供参考import com.cloudlead.common.worker.cli...

weixin_29802189的博客 2107

Java POI 实现填充Wrod模板表格内容

Java POI 实现填充Wrod模板内容 package ***; import lombok.extern.slf4j.Slf4j; import org.apache.poi.xwpf.usermodel.*; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.Map; /** *

qihensang的博客 998

java使用POI导出word数据以及生成word表格

暑期在杭州实习了两个月,主要是使用vue+SpringMVC进行一个网页开发。 而在开发的过程中,也遇到了比较常见的文件导出问题–以固定格式将数据存储在word、excel等office文件格式中。 在网上搜索了许多方法,了解到要导出word文件,其实办法由很多,如jacob,java2word,FreeMarker,Apatch POI等等。 本文采用的是Apatch POI中的一系列API,它...

leegyoungfree的博客 1万+

Java POI Word 写文档

1 package apache.poi; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.Fil...

womenzaiqianfang的专栏 149

Java 使用POI 给Word添加水印

Maven 引入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> ...

yunye的专栏 1万+

java 动态填充word 自动换行

如何实现Java动态填充Word自动换行 流程图 #render_6_1469626065-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#render_6_1469626065-svg .error-ic...

weixin_40460027的博客 718

java通过poi操作word创建表格

【代码】java通过poi操作word创建表格。

u011244410的专栏 4914
上一篇: 7.Unicode字符集与UTF-8字符编码
下一篇: 【NIO】1. 基础概念
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值