Java Word模板POI生成文件

使用 Apache POI 基于 Word 模板动态生成文档的完整指南

什么是 Apache POI?

Apache POI 是一个开源的 Java API,用于读写 Microsoft Office 文档(如 Word、Excel、PowerPoint)。其中,XWPF 组件专门用于处理 .docx 格式的 Word 文档。

为什么使用 Word 模板?

在实际开发中,常常需要根据业务数据动态填充 Word 文档。通过预先设计好格式的 Word 模板,再用 Java 程序替换占位符(如 ${name}${date}),可以高效生成标准化文档,适用于合同、报告、证书等场景。

基础代码示例

以下是一个使用 POI 替换 Word 模板中占位符的简单示例:

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

import java.io.*;
import java.util.Map;

public class WordTemplateGenerator {
    public static void generateWord(String templatePath, String outputPath, Map<String, String> replacements) throws Exception {
        try (FileInputStream fis = new FileInputStream(templatePath);
             FileOutputStream fos = new FileOutputStream(outputPath)) {

            XWPFDocument doc = new XWPFDocument(fis);

            // 替换段落中的文本
            for (XWPFParagraph paragraph : doc.getParagraphs()) {
                replaceInParagraph(paragraph, replacements);
            }

            // 替换表格中的文本
            for (XWPFTable table : doc.getTables()) {
                for (XWPFTableRow row : table.getRows()) {
                    for (XWPFTableCell cell : row.getTableCells()) {
                        for (XWPFParagraph paragraph : cell.getParagraphs()) {
                            replaceInParagraph(paragraph, replacements);
                        }
                    }
                }
            }

            doc.write(fos);
        }
    }

    private static void replaceInParagraph(XWPFParagraph paragraph, Map<String, String> replacements) {
        for (XWPFRun run : paragraph.getRuns()) {
            String text = run.getText(0);
            if (text != null) {
                for (Map.Entry<String, String> entry : replacements.entrySet()) {
                    text = text.replace("${" + entry.getKey() + "}", entry.getValue());
                }
                run.setText(text, 0);
            }
        }
    }
}

依赖配置(Maven)

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

注意事项

iPhone朗读文本功能使用指南 - 免费语音朗读教程 iPhone本地视频在哪里找?完整查找与管理指南 历代iPhone性能对比排行 - 全面了解苹果手机芯片与跑分表现 iPhone 17 侧面键位图 - 全新设计与功能详解 iPhone呼叫转移一直转圈圈怎么办?原因与解决方法 iPhone 6s Plus 参数详解 - 官方配置与规格信息 iPhone 17 外壳材质详解 - 最新苹果手机机身材质解析 Shopee买家入口 - 快速进入Shopee购物平台 iPhone XR 重量详解 - 轻盈手感与便携设计 iPhone怎么看芯片型号 - 快速查看苹果手机处理器型号方法 进入 iPhone 官网购买最新款苹果手机 - 官方渠道指南 iPhone 17 Pro 配置详情 - 最新苹果手机参数与功能介绍 iPhone 17信号实测:真实网络表现深度评测 iPhone信息显示红色感叹号?原因与解决方法 orient用法详解 - CSS与Web开发指南 iPhone如何取消消息震动?详细设置教程 - 苹果手机使用技巧 Play Store English Version - Download & Use Guide iPhone设置微信只震动不响铃 - 微信通知静音教程 Herion - 专业文档处理与办公效率工具平台 "invention"可数吗?详解英语名词用法 国行 iPhone 17 Pro Max 序列号查询与验证指南 iPhone怎么关闭通讯录共享?详细操作指南 iPhone取消呼叫转移的方法 - 完整图文教程 iPhone来电语音提示粤语设置指南 | 粤语语音播报教程 Cellphone是智能手机吗?全面解析手机术语 - 专题页面 iPhone拍月亮有光晕?原因解析与拍摄技巧 - 专题指南 SIPPhone软件打不开?常见原因与解决方法大全 iPhone照相快捷键使用指南 - 快速拍照技巧大全 iPhone 17,5 是 iPhone 16e 吗?全面解析苹果新机型命名之谜 iPhone 16录屏功能在哪里?详细开启与使用指南 iPhone 16 照相美颜功能在哪?设置与使用指南 iPhone 17 Pro 多大?最新屏幕尺寸与机身规格详解 怎么查看iPhone型号 - 快速识别你的苹果手机型号方法大全 为什么 iPhone 17 比 iPhone 16 便宜?真相揭秘 iPhone几代支持5G?全系列5G机型一览 - 手机技术指南 Technics功放 - 高保真音响系统的经典之选 iPhone显示在另一台设备登录?原因与解决方法 iPhone 12 Pro 电池详解 - 容量、续航与更换指南 iPhone如何将英文改为中文 - 完整设置教程 iPhone原装手机壳 - 官方正品保护套推荐 iPhone天梯图 - 最新苹果手机性能排行榜 iPhone 13 专用壁纸下载 - 高清精美手机壁纸合集 “prediction”有没有复数?详解英语名词复数形式 苹果iPhone15怎么截屏 - 完整操作指南 iPhone返回上一级手势操作指南 - 快速掌握iOS导航技巧 iPhone 11刚上市多少钱?首发价格与配置详解 iPhone 7 尺寸参数详解 - 屏幕大小、重量、分辨率等完整规格 Promience - 专业文档处理与办公效率提升平台 iPhone SE 2 参数配置详解 | 官方规格与功能介绍 如何还原 iPhone 的出厂设置 - 完整图文教程 iPhone 17,2 是苹果什么版本?最新机型解析 iPhone 4 国行上市时间 - 全面解析苹果经典机型发布历史 iPhone为什么锁屏后屏幕还亮?原因与解决方法详解 适用于 iPhone 的网站推荐 - 轻量、快速、兼容 iOS iPhone 17 充电功率详解 - 最新快充技术与兼容性指南 in possession of 的被动涵义详解 | 英语语法专题 prorince英语怎么读?正确发音、音标与常见误读解析 iPhone 14 Pro 卡槽怎么分1和2?详细图文指南 iPhone 7信号不稳定怎么回事?原因分析与解决方法 iPhone视频变成实况照片 - 免费教程与工具指南 reputation音标 - 英文单词发音与音标查询 美版iPhone能插中国卡吗?全面解析与使用指南 iPhone 16 多少G?存储容量详解与选购指南 如何分辨iPhone真假?全面鉴别方法指南 - 苹果手机防伪教程 苹果iPhone互通能打电话吗?详解Handoff与通话功能 - 专题指南 iPhone 17 多少克重?最新重量参数与对比分析 iPhone 17 多少克?最新重量信息与规格解析 Dereaction 专题页 - 探索数字创意与文档处理新方式 iPhone 11 屏幕尺寸与机身大小详解 - 规格参数全解析 develop与invent的区别 - 英语词汇辨析专题 iPhone照片搜索文字 - 快速提取图片中的文字内容 Onership - 探索自主与责任的数字理念 YotaPhone4 专题介绍 - 双屏智能手机先驱 iPhone 12 是铝合金吗?材质详解与对比 - 专题页面 iPhone社区论坛 - 苹果用户交流平台 | 讨论技巧、问题求助与最新资讯 iPhone 8 Plus 屏幕长宽尺寸详解 | 参数与比例指南 iPhone 12手机壳和哪些型号通用?全面兼容指南 iPhone怎么绑定iPad?详细图文教程指南 iPhone手势解锁怎么设置 - 完整图文教程指南 iPhone XR 蓝色版 - 官方配色与设计亮点介绍 iPhone 15 截屏怎么设置?详细操作指南 iPhone手机怎么换行?详细操作方法与技巧 persition翻译中文 - 在线专业术语与单词翻译查询 iPhone上如何设置呼叫转移 - 完整图文教程 iPhone 8 Plus 专题介绍 - 经典大屏 iPhone 回顾 iPhone SE2 与 iPhone 7 对比评测 | 参数、性能、选购指南 iPhone怎么开夜间模式?详细设置教程 - 苹果手机护眼指南 iPhone照片格式HEIC怎么换成JPG?详细转换方法指南 iPhone6忘记锁屏密码怎么办?完整解锁方法指南 iPhone 17 官网 - 全新设计,极致体验 | 苹果新品发布 Rohens多少钱?价格详情与购买指南 Exhibition固定搭配大全 | 常见英语搭配与例句解析 试用期指南 - 入职、权益与注意事项详解 Exnibition 专题页 - 探索文档处理与办公效率提升 Techtronics - 探索未来科技与智能硬件 iPhone突然震动三下是什么原因?全面解析与解决方法 iPhone 8 机身尺寸详解 - 完整参数与对比指南 Fireipen - 在线文档处理与办公效率工具专题 Shopee买家端使用指南 - 购物技巧、订单管理与售后教程 iPhone空行怎么打?详细教程与解决方法