gpt4 book ai didi

java - 如何使用 Docx4j Java 从 Ms word 合并字段获取值

转载 作者:行者123 更新时间:2023-12-01 23:31:22 28 4
gpt4 key购买 nike

我正在尝试使用 java 中的 Docx4j 从合并字段中检索值。目前我正在使用以下方法检索Word文档的所有内容:

WordprocessingMLPackage newWordMLPackage = WordprocessingMLPackage
.load(new java.io.File("C:/Users/admin/Desktop/test" + i + ".docx"));
MainDocumentPart documentPart = newWordMLPackage.getMainDocumentPart();
System.out.println(documentPart.getContent());

这将返回 Word 文档的内容列表。我目前得到的是

MERGEFIELD 姓氏\* MERGEFORMAT Himura

我想要的是从合并字段“lastName”中获取值“himura”。我怎样才能实现这一目标?
谢谢

最佳答案

您可以使用 xpath 来完成此操作 - 请参阅方法 documentPart.getJAXBNodesViaXPath(xpath, false);

我有类似的问题(想用我自己的内容替换 MergeField)。经过长期研究,我写了一个可以做到的方法:

private void replaceTextWithElement(MainDocumentPart mainDocumentPart, String textToReplace, Collection<Object> newElements) throws JAXBException, Docx4JException {
final String xpath = "//w:r[w:instrText[contains(text(),'MERGEFIELD') and contains(text(),'" + textToReplace + "')]]";
final List<Object> foundNodes = mainDocumentPart.getJAXBNodesViaXPath(xpath, false);
if (isEmpty(foundNodes)) {
throw new RuntimeException("Cannot find textToReplace: \"" + textToReplace + "\" in document, skipping replacement.");
}

final R r = (R)foundNodes.get(0);
final P parent = (P)r.getParent();
final int index = mainDocumentPart.getContent().indexOf(parent);

mainDocumentPart.getContent().remove(parent);
if (newElements != null) {
mainDocumentPart.getContent().addAll(index, newElements);
}
}

关于java - 如何使用 Docx4j Java 从 Ms word 合并字段获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20759447/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com