Java 读取word模板 填充内容格式

在开发中,我们经常需要使用Word文档作为模板,然后通过代码将一些动态内容填充到模板中。本文将介绍如何使用Java读取Word模板并填充内容的格式。

为什么需要读取Word模板并填充内容?

在实际项目中,我们可能会遇到需要生成大量格式相同但内容不同的Word文档的情况。而手动去一个一个填充内容显然效率低下,容易出错。因此,我们可以通过Java代码读取Word模板并将需要的内容填充进去,从而提高工作效率。

Java读取Word模板的方式

在Java中,我们可以使用Apache POI库来读取Word文档。Apache POI是一个用于读写Microsoft Office文件的Java库。我们可以通过POI库读取Word文档,并将其内容加载到内存中进行操作。

下面是一个简单的示例代码,演示如何使用Java读取Word模板并填充内容:

import org.apache.poi.xwpf.usermodel.*;

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

public class WordTemplateFiller {

    public void fillTemplate(String templatePath, String outputPath, Map<String, String> placeholders) throws IOException {
        XWPFDocument doc = new XWPFDocument(new FileInputStream(templatePath));
        
        for (XWPFParagraph p : doc.getParagraphs()) {
            for (XWPFRun r : p.getRuns()) {
                String text = r.getText(0);
                if (text != null) {
                    for (Map.Entry<String, String> entry : placeholders.entrySet()) {
                        text = text.replace(entry.getKey(), entry.getValue());
                    }
                    r.setText(text, 0);
                }
            }
        }
        
        for (XWPFTable table : doc.getTables()) {
            for (XWPFTableRow row : table.getRows()) {
                for (XWPFTableCell cell : row.getTableCells()) {
                    for (XWPFParagraph p : cell.getParagraphs()) {
                        for (XWPFRun r : p.getRuns()) {
                            String text = r.getText(0);
                            if (text != null) {
                                for (Map.Entry<String, String> entry : placeholders.entrySet()) {
                                    text = text.replace(entry.getKey(), entry.getValue());
                                }
                                r.setText(text, 0);
                            }
                        }
                    }
                }
            }
        }
        
        FileOutputStream out = new FileOutputStream(outputPath);
        doc.write(out);
        out.close();
    }
}

上面的代码中,我们首先使用XWPFDocument类加载Word模板文件,然后遍历文档中的段落和表格,将占位符替换为实际内容,最后将填充后的文档输出到指定路径。

示例

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

Hello, ${name}!
Today is ${date}.

我们可以通过以下代码将${name}${date}替换为实际内容:

WordTemplateFiller filler = new WordTemplateFiller();
Map<String, String> placeholders = new HashMap<>();
placeholders.put("${name}", "Alice");
placeholders.put("${date}", "2022-01-01");
filler.fillTemplate("template.docx", "output.docx", placeholders);

运行以上代码后,将在当前目录生成一个新的Word文档output.docx,内容为:

Hello, Alice!
Today is 2022-01-01.

总结

通过本文的介绍,我们了解了如何使用Java读取Word模板并填充内容。这种方式能够提高我们在项目中处理大量Word文档的效率,使得我们可以更快速地生成需要的文档。希望读者能够在实际项目中应用这些技巧,提高工作效率。

甘特图

gantt
    title 甘特图示例
    dateFormat  YYYY-MM-DD
    section 项目A
    任务1           :done, a1, 2022-01-01, 3d
    任务2           :done, a2, after a1, 2d
    任务3           :active, a3, after a2, 5d
    section 项目B
    任务1           :crit, b1, 2022-01-01, 2d
    任务2           :crit, b2, after b1, 3d