首页
/ POI使用word模板文件循环输出行并导出word

POI使用word模板文件循环输出行并导出word

2025-07-31 01:04:30作者:范垣楠Rhoda

1. 适用场景

在日常办公或开发中,我们经常需要批量生成格式统一的Word文档。例如:

  • 批量生成合同、报告或通知。
  • 根据数据源动态填充模板内容。
  • 自动化办公场景中,减少重复性工作。

使用POI(Apache POI)结合Word模板文件,可以高效地实现循环输出行并导出Word的功能,大幅提升工作效率。

2. 适配系统与环境配置要求

系统要求

  • 支持Windows、Linux和macOS操作系统。
  • 需要Java运行环境(JDK 1.8及以上版本)。

依赖库

  • Apache POI库(推荐版本5.0及以上)。
  • 相关依赖包(如poi-ooxml用于处理.docx文件)。

3. 资源使用教程

步骤1:准备Word模板文件

  1. 创建一个Word文档作为模板。
  2. 在模板中预留占位符,例如${name}${date}等,用于动态填充内容。

步骤2:编写Java代码

以下是一个简单的示例代码,展示如何使用POI读取模板并循环填充数据:

import org.apache.poi.xwpf.usermodel.*;
import java.io.*;
import java.util.*;

public class WordTemplateProcessor {
    public static void main(String[] args) throws Exception {
        // 加载模板文件
        XWPFDocument doc = new XWPFDocument(new FileInputStream("template.docx"));

        // 模拟数据源
        List<Map<String, String>> data = new ArrayList<>();
        Map<String, String> row1 = new HashMap<>();
        row1.put("name", "张三");
        row1.put("date", "2023-10-01");
        data.add(row1);

        Map<String, String> row2 = new HashMap<>();
        row2.put("name", "李四");
        row2.put("date", "2023-10-02");
        data.add(row2);

        // 替换占位符
        for (XWPFParagraph p : doc.getParagraphs()) {
            String text = p.getText();
            if (text != null && text.contains("${")) {
                for (Map<String, String> row : data) {
                    for (String key : row.keySet()) {
                        text = text.replace("${" + key + "}", row.get(key));
                    }
                    p.replaceText(text, text);
                }
            }
        }

        // 导出Word文件
        FileOutputStream out = new FileOutputStream("output.docx");
        doc.write(out);
        out.close();
        doc.close();
    }
}

步骤3:运行与验证

  1. 将代码保存为WordTemplateProcessor.java
  2. 编译并运行程序。
  3. 检查生成的output.docx文件,确认内容已正确填充。

4. 常见问题及解决办法

问题1:占位符未替换

  • 原因:占位符格式不正确或数据未匹配。
  • 解决:检查模板中的占位符是否与代码中的键名一致。

问题2:生成的Word文件损坏

  • 原因:文件写入过程中出现异常。
  • 解决:确保文件路径正确,且程序有写入权限。

问题3:性能问题

  • 原因:数据量过大时,处理速度较慢。
  • 解决:优化代码逻辑,或分批处理数据。

通过以上方法,您可以轻松实现POI结合Word模板的批量生成功能,满足各种办公自动化需求。