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模板文件
- 创建一个Word文档作为模板。
- 在模板中预留占位符,例如
${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:运行与验证
- 将代码保存为
WordTemplateProcessor.java
。 - 编译并运行程序。
- 检查生成的
output.docx
文件,确认内容已正确填充。
4. 常见问题及解决办法
问题1:占位符未替换
- 原因:占位符格式不正确或数据未匹配。
- 解决:检查模板中的占位符是否与代码中的键名一致。
问题2:生成的Word文件损坏
- 原因:文件写入过程中出现异常。
- 解决:确保文件路径正确,且程序有写入权限。
问题3:性能问题
- 原因:数据量过大时,处理速度较慢。
- 解决:优化代码逻辑,或分批处理数据。
通过以上方法,您可以轻松实现POI结合Word模板的批量生成功能,满足各种办公自动化需求。