Apache POI 5.2.2 版本:Word 文档书签内容复制方法优化

本文介绍使用 Apache POI 5.2.2 版本进行 Word 文档操作时,一种更简洁高效的书签内容复制方法。

在之前的代码中,我们通过遍历每个段落,查找 FORMTEXT 字段,并提取字段值与指定的书签名进行比较,来实现书签内容的复制。这种方法存在一些问题,例如:

  1. 如果有多个相同名称的书签,只能复制第一个匹配的书签内容。
  2. 代码逻辑相对繁琐。

为了解决这些问题,我们可以使用以下方法来复制书签内容:

// 复制书签内容
private static void copyBookmarkContent(String bookmarkName, XWPFDocument sourceDoc, XWPFDocument targetDoc) {
    for (XWPFParagraph paragraph : sourceDoc.getParagraphs()) {
        List<XWPFRun> runs = paragraph.getRuns();
        for (XWPFRun run : runs) {
            CTSimpleField field = run.getCTR().getFldSimpleList().get(0);
            if (field.getInstr().contains(' FORMTEXT ')) {
                String fieldValue = field.getInstr().split('"')[1];
                if (fieldValue.equals(bookmarkName)) {
                    XWPFParagraph newParagraph = targetDoc.createParagraph();
                    XWPFRun newRun = newParagraph.createRun();
                    newRun.setText(run.getText(0));
                    break;
                }
            }
        }
    }
}

这个方法遍历源文档的所有段落,然后遍历每个段落中的运行元素。对于每个运行元素,它获取第一个简单字段 (CTSimpleField),并检查它的指令是否包含 ' FORMTEXT '。如果是的话,它提取字段的值,并与指定的书签名进行比较。如果匹配,则在目标文档中创建一个新的段落和运行元素,并将源文档中运行元素的文本复制到新的运行元素中。

优点:

  • 代码逻辑更简洁。
  • 可以复制多个相同名称的书签内容。

注意事项:

  • 这个方法假设每个段落中只有一个简单字段,并且书签名是唯一的。如果有多个简单字段或多个相同的书签名,它只会复制第一个匹配的内容。如果需要处理多个字段或多个相同的书签名,请根据实际需求进行修改。

希望本文对你有所帮助,如有问题请随时留言。

Apache POI 5.2.2 版本:Word 文档书签内容复制方法优化

原文地址: https://www.cveoy.top/t/topic/fKLn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录