在Java中将数据导出到Word文档是一项常见的需求,尤其是在生成报告或文档时。我们可以使用Apache POI库来实现这一功能。Apache POI是一个强大的Java库,可以操作Microsoft Office格式的文件,包括Word文档(.doc和.docx格式)。本文将通过一些基本示例来演示如何根据模板导出数据到Word文档中,主要使用表格和自定义标签。
1. 环境准备
首先,需要在项目中添加Apache POI的依赖。在使用Maven的项目中,可以在pom.xml
中添加以下依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version> <!-- 请根据最新版本修改 -->
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>5.0.2</version> <!-- 请根据最新版本修改 -->
</dependency>
2. Word文档模板
在开始之前,我们首先需要创建一个Word文档模板。假设我们有一个名为template.docx
的Word文档,其内容如下:
项目名称:${projectName}
开始日期:${startDate}
结束日期:${endDate}
任务列表:
| 任务 | 状态 |
| ----------- | ------- |
| ${task1} | ${status1}|
| ${task2} | ${status2}|
3. 替换自定义标签
接下来,编写Java代码来读取模板并替换自定义标签。以下是一个示例代码,演示如何完成这一过程:
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class WordExport {
public static void main(String[] args) {
String templatePath = "template.docx";
String outputPath = "output.docx";
Map<String, String> data = new HashMap<>();
data.put("projectName", "新项目");
data.put("startDate", "2023-01-01");
data.put("endDate", "2023-12-31");
data.put("task1", "任务1");
data.put("status1", "完成");
data.put("task2", "任务2");
data.put("status2", "进行中");
replaceTemplate(templatePath, outputPath, data);
}
public static void replaceTemplate(String templatePath, String outputPath, Map<String, String> data) {
try (InputStream template = new FileInputStream(templatePath);
XWPFDocument document = new XWPFDocument(template);
FileOutputStream out = new FileOutputStream(outputPath)) {
// 替换文本
for (XWPFParagraph paragraph : document.getParagraphs()) {
for (String key : data.keySet()) {
String text = paragraph.getText();
if (text.contains("${" + key + "}")) {
text = text.replace("${" + key + "}", data.get(key));
for (XWPFRun run : paragraph.getRuns()) {
run.setText("", 0); // 清空原文字
}
paragraph.createRun().setText(text);
}
}
}
document.write(out);
System.out.println("文档生成成功: " + outputPath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. 代码解析
在上述代码中:
- 我们使用
XWPFDocument
来加载Word文档模板。 - 通过遍历文档中的所有段落并检查有没有自定义标签(如
${projectName}
),用实际的数据替换这些标签。 - 最后,将生成的文档输出到指定的路径。
5. 总结
通过使用Apache POI,可以很方便地将数据导出到Word文档中。通过定义模板和使用自定义标签,使得文档生成的过程更加灵活和高效。上述示例仅为基本的实现,实际应用中可能需要处理更复杂的格式和样式,如表格、图片等,Apache POI都能提供强有力的支持。