您好我正在尝试替换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);
}
}
答案 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以获取完整的代码详细信息,因为还有一些事情要处理才能使其正常运行。