Apache POI 5.2.2 版本:Word 文档书签内容复制方法优化
Apache POI 5.2.2 版本:Word 文档书签内容复制方法优化
本文介绍使用 Apache POI 5.2.2 版本进行 Word 文档操作时,一种更简洁高效的书签内容复制方法。
在之前的代码中,我们通过遍历每个段落,查找 FORMTEXT 字段,并提取字段值与指定的书签名进行比较,来实现书签内容的复制。这种方法存在一些问题,例如:
- 如果有多个相同名称的书签,只能复制第一个匹配的书签内容。
- 代码逻辑相对繁琐。
为了解决这些问题,我们可以使用以下方法来复制书签内容:
// 复制书签内容
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 '。如果是的话,它提取字段的值,并与指定的书签名进行比较。如果匹配,则在目标文档中创建一个新的段落和运行元素,并将源文档中运行元素的文本复制到新的运行元素中。
优点:
- 代码逻辑更简洁。
- 可以复制多个相同名称的书签内容。
注意事项:
- 这个方法假设每个段落中只有一个简单字段,并且书签名是唯一的。如果有多个简单字段或多个相同的书签名,它只会复制第一个匹配的内容。如果需要处理多个字段或多个相同的书签名,请根据实际需求进行修改。
希望本文对你有所帮助,如有问题请随时留言。
原文地址: https://www.cveoy.top/t/topic/fKLn 著作权归作者所有。请勿转载和采集!