JAVA POI DOCX替换段落中的文字

时间:2014-12-17 09:41:04

标签: java apache-poi docx

您好我正在尝试替换docx文件中的某些文本,但是我遇到了可以在多次运行中替换的文本问题。所以我尝试了这个:但它删除了文档中的所有内容:/

private void replaceText(XWPFParagraph p, String target, String replacement) {
    if (p.getRuns() != null) {
        String paragraph = p.getText();
        for (int i = 0; i < p.getRuns().size(); i++) {
            p.removeRun(i);
        }
        paragraph = paragraph.replace(target, replacement);
        XWPFRun r = new XWPFRun(CTR.Factory.newInstance(), p);
        r.setText(paragraph, 0);

    }
}

1 个答案:

答案 0 :(得分:0)

对于我的一个项目,我选择了不同的路径,我处理基础XML数据并在那里进行搜索/替换,这通常很有效。

详见https://github.com/centic9/poi-mail-merge,但基本上我是通过

获取CTBody低级别项目
CTBody body = doc.getDocument().getBody();

然后阅读完整的XML正文

// read the current full Body text
String srcString = body.xmlText();

然后进行替换。

最后,我通过

创建一个带有新内容的新CTBody项目
CTBody makeBody = CTBody.Factory.parse(resultStr);

请参阅https://github.com/centic9/poi-mail-merge/blob/master/src/main/java/org/dstadler/poi/mailmerge/MailMerge.java#L81以获取完整的代码详细信息,因为还有一些事情要处理才能使其正常运行。