Apache POI 5.2.2 版本 - 复制 Word 文档书签内容的解决方案
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() 方法的问题了。
原文地址: https://www.cveoy.top/t/topic/fKLf 著作权归作者所有。请勿转载和采集!