Apache POI 5.2.2 版本 - 复制 Word 文档书签内容的解决方案

在 Apache POI 5.2.2 版本中,getFldSimpleListList() 方法已被移除。如果您在复制 Word 文档中的书签内容时遇到了 "找不到符号: 方法 getFldSimpleListList()" 的错误,这是因为您使用的 POI 版本过高,导致方法签名不匹配。

解决方案:

您需要使用 getFldSimpleList() 方法来获取 CTSimpleField 列表。请修改 copyBookmarkContent() 方法中的代码如下:

private static void copyBookmarkContent(String bookmarkName, XWPFDocument sourceDoc, XWPFDocument targetDoc) {
    for (XWPFParagraph paragraph : sourceDoc.getParagraphs()) {
        for (XWPFRun run : paragraph.getRuns()) {
            List<CTSimpleField> fields = run.getCTR().getFldSimpleList();
            for (CTSimpleField field : fields) {
                if (field.getInstr().contains(' FORMTEXT ')) {
                    String fieldValue = field.getInstr().split(''')[1];
                    if (fieldValue.equals(bookmarkName)) {
                        targetDoc.createParagraph().createRun().setText(paragraph.getText());
                        break;
                    }
                }
            }
        }
    }
}

代码解释:

  • 首先,我们遍历 Word 文档中的所有段落。
  • 然后,遍历每个段落中的所有运行。
  • 使用 run.getCTR().getFldSimpleList() 获取包含书签的 CTSimpleField 列表。
  • 最后,遍历每个 CTSimpleField 对象,判断其是否为 FORMTEXT 类型,并提取书签名称。

修改后的代码使用 getFldSimpleList() 方法获取 CTSimpleField 列表,并使用单引号 ' 包裹字符串,避免与双引号冲突。

完成以上修改后,应该就可以解决找不到 getFldSimpleListList() 方法的问题了。

Apache POI 5.2.2 版本 - 复制 Word 文档书签内容的解决方案

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

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