使用Java创建Word模板并填充数据

在日常工作中,我们经常需要生成和编辑Word文档。而有时候,我们需要将一些固定格式的文档作为模板,然后填充一些动态数据到模板中。本文将介绍如何使用Java创建Word模板并填充数据。

1. 创建Word模板

首先,我们需要创建一个Word模板文件,该文件包含了需要填充的固定内容,以及一些占位符来标识需要填充的动态数据。可以使用Microsoft Word或其他文档编辑软件创建模板文件。在模板中使用一些特定的标记来表示需要填充数据的位置,比如${name}表示姓名,${age}表示年龄等。

2. 使用Apache POI库操作Word文档

Apache POI是一个用于操作Microsoft Office格式文档的Java库。我们可以使用Apache POI来读取并填充Word文档。

首先,我们需要在项目中引入Apache POI库的依赖:

<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>

然后,我们可以使用下面的代码来读取Word模板文件,并填充数据:

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTemplate;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;

public class WordTemplateFiller {

    public static void fillTemplate(String templatePath, String outputPath, Map<String, String> data) {
        try (FileInputStream fis = new FileInputStream(templatePath);
             XWPFTemplate template = XWPFTemplate.compile(fis)) {
            XWPFDocument document = template.getXWPFDocument();
            for (XWPFParagraph paragraph : document.getParagraphs()) {
                for (XWPFRun run : paragraph.getRuns()) {
                    String text = run.getText(0);
                    if (text != null) {
                        for (Map.Entry<String, String> entry : data.entrySet()) {
                            text = text.replace(entry.getKey(), entry.getValue());
                        }
                        run.setText(text, 0);
                    }
                }
            }
            try (FileOutputStream fos = new FileOutputStream(outputPath)) {
                document.write(fos);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Map<String, String> data = new HashMap<>();
        data.put("${name}", "Alice");
        data.put("${age}", "30");
        fillTemplate("template.docx", "output.docx", data);
    }
}

3. 示例

假设我们有一个模板文件template.docx,内容如下:

Hello, ${name}!

You are ${age} years old.

我们可以使用上面的代码将模板中的${name}${age}替换为具体的值,并生成新的文档output.docx

4. 结语

通过本文的介绍,我们了解了如何使用Java创建Word模板并填充数据。这在实际工作中非常有用,可以帮助我们快速生成符合需求的文档。希望本文对您有所帮助!