java - 使用Apache POI编辑Word文档

原文 标签 java apache-poi

我试图读取一个Word文档模板,然后用用户给定的数据替换模板中的变量。不更改模板上的标题或样式。我不确定我所做的是否正确,但这是我开始的方式:

'XWPFDocument docx = new XWPFDocument(
            new FileInputStream(
                    "D://TestDocumentPrep/src/XXXXX_TestReport_URL_Document.docx"));
    XWPFWordExtractor we = new XWPFWordExtractor(docx);
    String textData = we.getText();
    String newTestData=textData.replace("$var_source_code$", list.get(1))
            .replace("$var_rsvp_code$", list.get(2))
            .replace("$var_ssn$", list.get(3))
            .replace("$var_zip_code$", list.get(4))
            .replace("$var_point_for_business$",
                    anotherData.getPointForBusiness())
            .replace("$var_E1_url$", anotherData.getE1url())
            .replace("$var_E2_url$", anotherData.getE2url())
            .replace("$var_E3_url$", anotherData.getE3url());
    System.out.println(newTestData);'

这就是我所做的。但是它将word文档的内容作为字符串读取并替换变量。现在如何将替换的字符串以模板格式放入word文档中?
Here I found something but Not exactly my solution
Here also I found something but not exact solution

最佳答案

嗨,我能找到解决办法
这是我用来编辑我的word文档的代码,我想编辑的文件的.doc和.docx格式都可以,并且可以在不更改基本模板的情况下生成一个已编辑的新word文档。

public void wordDocProcessor(AnotherVO anotherData, ArrayList<String> list,
        String sourse, String destination) throws IOException,
        InvalidFormatException {
    XWPFDocument doc = new XWPFDocument(OPCPackage.open(sourse
            + "XXXXX_TestReport_URL_Document.doc"));
    for (XWPFTable tbl : doc.getTables()) {
        for (XWPFTableRow row : tbl.getRows()) {
            for (XWPFTableCell cell : row.getTableCells()) {
                for (XWPFParagraph p : cell.getParagraphs()) {
                    for (XWPFRun r : p.getRuns()) {
                        String text = r.getText(0);
                        if (text != null
                                && text.contains("var_source_code")) {
                            text = text.replace("var_source_code",
                                    list.get(1));
                            r.setText(text, 0);
                        }
                        if (text != null && text.contains("var_rsvp_code")) {
                            text = text.replace("var_rsvp_code",
                                    list.get(2));
                            r.setText(text, 0);
                        }
                        if (text != null && text.contains("var_ssn")) {
                            text = text.replace("var_ssn", list.get(3));
                            r.setText(text, 0);
                        }
                        if (text != null && text.contains("var_zip_code")) {
                            text = text
                                    .replace("var_zip_code", list.get(4));
                            r.setText(text, 0);
                        }
                        if (text != null
                                && text.contains("var_point_for_business")) {
                            text = text.replace("var_point_for_business",
                                    anotherData.getPointForBusiness());
                            r.setText(text, 0);
                        }
                        if (text != null && text.contains("var_E1_url")) {
                            text = text.replace("var_E1_url",
                                    anotherData.getE1url());
                            r.setText(text, 0);
                        }
                        if (text != null && text.contains("var_E2_url")) {
                            text = text.replace("var_E2_url",
                                    anotherData.getE2url());
                            r.setText(text, 0);
                        }
                        if (text != null && text.contains("var_E3_url")) {
                            text = text.replace("var_E3_url",
                                    anotherData.getE3url());
                            r.setText(text, 0);
                        }
                    }
                }
            }
        }
    }
    doc.write(new FileOutputStream(destination + list.get(0)
            + "_TestReport_URL_Document.doc"));
}

相关文章:

java - 如何使用Java将工作表添加到现有的大型Excel文件(20MB)?

java - 防止在Java中两次显示Arraylist值

excel - JAVA-写入Excel文件时Apache POI OutOfMemoryError

java - HSSFSheet POI API Java不会用颜色填充所有列

java - 无法使用Apache POI 3.14读取XLSX文件

java - 如何使用java apache poi从Excel工作表中的仅少数列中删除过滤器,而不是所有列中删除过滤器

java - 如何从FileInputStream获取EOFException

java - WAR中的文件出现两次

java - HTTP和套接字:

java - 如何用秋千创建一个简单的两线边框?