Apache POI 5.2.2中使用`getFldSimpleList()`方法替换`getFieldList()`方法
Apache POI 5.2.2 中使用getFldSimpleList()方法替换getFieldList()方法
在 Apache POI 5.2.2 版本中,getFieldList() 方法已被移除。您可以使用getFldSimpleList()方法来替代。
问题:
以下代码在 Apache POI 5.2.2 版本中会报错:java: 找不到符号 符号: 方法 getFieldList() 位置: 接口 org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR
package word;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSimpleField;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
public class Word {
public static void main(String[] args) {
try {
// 打开输入文档1
XWPFDocument inputDoc1 = new XWPFDocument(new FileInputStream("input01.docx"));
// 打开输入文档2
XWPFDocument inputDoc2 = new XWPFDocument(new FileInputStream("input02.docx"));
// 创建输出文档
XWPFDocument outputDoc = new XWPFDocument();
// 复制输入文档1的内容到输出文档
copyDocumentContent(inputDoc1, outputDoc);
// 复制输入文档1中指定书签的内容到输出文档
copyBookmarkContent('应变计', inputDoc1, outputDoc);
// 复制输入文档2中指定书签的内容到输出文档
copyBookmarkContent('位移计', inputDoc2, outputDoc);
// 保存输出文档
FileOutputStream out = new FileOutputStream("input04.docx");
outputDoc.write(out);
out.close();
System.out.println("复制完成");
} catch (Exception e) {
e.printStackTrace();
}
}
// 复制文档内容
private static void copyDocumentContent(XWPFDocument sourceDoc, XWPFDocument targetDoc) {
for (IBodyElement element : sourceDoc.getBodyElements()) {
if (element instanceof XWPFParagraph) {
XWPFParagraph paragraph = (XWPFParagraph) element;
targetDoc.createParagraph().createRun().setText(paragraph.getText());
} else if (element instanceof XWPFTable) {
XWPFTable table = (XWPFTable) element;
targetDoc.createTable().getCTTbl().setTblPr(table.getCTTbl().getTblPr());
}
}
}
// 复制书签内容
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().getFieldList(); // 报错
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;
}
}
}
}
}
}
}
解决办法:
请将以下代码替换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;
}
}
}
}
}
}
这样就可以解决找不到getFieldList()方法的问题。
注意:
在使用 Apache POI 时,建议您使用最新版本,并参考官方文档进行学习。
更多信息:
- Apache POI 官方网站:https://poi.apache.org/
- Apache POI 文档:https://poi.apache.org/apidocs/
原文地址: https://www.cveoy.top/t/topic/fKIX 著作权归作者所有。请勿转载和采集!