JAVA POI DOCX 替换段落中的文本

标签 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);

    }
}

最佳答案

它肯定会删除所有内容,因为您要删除段落中的所有运行。这里需要理解的是,段落中的文本存储在运行中。 getText() 的作用是返回段落中所有运行中的所有文本。
删除所有运行并仅添加一个新运行肯定会破坏文本的字体和对齐方式

您将删除所有运行,然后使用替换的文本添加一个运行。 我相信这不是您希望达到的目标。

Just loop over the runs and replace the text inside them. 

关于JAVA POI DOCX 替换段落中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522466/

相关文章:

java - 如何创建对象数组

java.lang.NoSuchMethodError : org. apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava/util/Iterator;

java - Subclipse 忽略文件,特别是 .classpath

Java 8 使用键重复检查将二维数组转换为 Map

java - Apache poi - 千位分隔符

Markdown 到 docx,包括复杂的模板

python - 使用 Python 和 LibreOffice 将 pdf 转换为 docx 以及将 doc 转换为 docx 时遇到问题

node.js - 有没有办法将元数据写入 Node.js 中的 docx 文件?

java - 无法启动 Tomcat 服务器实例

java - 是否可以使用java程序从数据透视表中读取数据?