首页
/ Java使用POI操作Word模板替换与循环插入表格教程

Java使用POI操作Word模板替换与循环插入表格教程

2025-08-03 01:44:21作者:邬祺芯Juliet

1. 适用场景

在日常开发中,我们经常需要动态生成Word文档,例如合同、报告、账单等。这些文档通常有固定的模板,但内容需要根据数据动态填充。本教程将介绍如何使用Java的POI库操作Word模板,实现文本替换和循环插入表格的功能。适用于以下场景:

  • 批量生成合同或报告。
  • 动态填充表格数据。
  • 自动化办公文档处理。

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

系统要求

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

依赖库

  • Apache POI库(推荐版本5.0及以上)。
  • 如果需要处理docx格式的Word文档,还需引入poi-ooxml依赖。

3. 资源使用教程

3.1 文本替换

  1. 加载模板文件:使用POI的XWPFDocument类加载Word模板文件。
  2. 定位替换文本:遍历文档段落,找到需要替换的占位符(如${name})。
  3. 替换内容:将占位符替换为实际数据。

3.2 循环插入表格

  1. 获取表格模板:在Word模板中预先设计好表格样式。
  2. 动态插入行:根据数据量动态添加表格行。
  3. 填充数据:将数据逐行填充到表格中。

示例代码片段

// 加载模板
XWPFDocument doc = new XWPFDocument(new FileInputStream("template.docx"));

// 替换文本
for (XWPFParagraph paragraph : doc.getParagraphs()) {
    String text = paragraph.getText();
    if (text.contains("${name}")) {
        text = text.replace("${name}", "张三");
        paragraph.removeRun(0);
        paragraph.createRun().setText(text);
    }
}

// 插入表格数据
XWPFTable table = doc.getTables().get(0);
for (int i = 0; i < dataList.size(); i++) {
    XWPFTableRow row = table.createRow();
    row.getCell(0).setText(dataList.get(i).getName());
    row.getCell(1).setText(dataList.get(i).getValue());
}

// 保存文档
doc.write(new FileOutputStream("output.docx"));

4. 常见问题及解决办法

问题1:替换文本后格式丢失

  • 原因:直接替换文本可能会破坏原有格式。
  • 解决办法:使用XWPFRun对象逐段处理文本,保留原有格式。

问题2:表格插入行后样式不一致

  • 原因:动态插入的行未继承模板行的样式。
  • 解决办法:复制模板行的样式到新插入的行。

问题3:处理大文件时内存溢出

  • 原因:POI默认将整个文档加载到内存中。
  • 解决办法:使用SXSSFWorkbook或分块处理文档。

通过本教程,你可以轻松掌握使用POI操作Word模板的技巧,提升文档处理的效率与灵活性!