使用的 <artifactId>spire.doc.free</artifactId>
<version>2.7.3</version>
Document doc = new Document();
doc.loadFromFile("test.docx");
Bookmark bookmark = doc.getBookmarks().get("test1");
//判断书签是否在单元格内
if (((Paragraph) bookmark.getBookmarkStart().getOwner()).isInCell()) {
BookmarkStart bookmarkStart = bookmark.getBookmarkStart();
// 获取书签所在的段落
Paragraph paragraph = (Paragraph) bookmarkStart.getOwner();
// 获取段落所在的单元格
TableCell cell = (TableCell) paragraph.getOwner();
TableRow row = (TableRow) cell.getOwner();
Table table = (Table) row.getOwner();
}public static void main(String[] args) {
Document document = new Document();
document.loadFromFile("2023年部门预算公开模板(1).docx");
ArrayList<Table> tables = new ArrayList<>();
ArrayList<Bookmark> bookMark = getBookMark(document);
for (int i =0;i<bookMark.size();i++){
if (bookMark.get(i).getName().contains("Table")
&& !bookMark.get(i).getName().contains("DivName")
&& !bookMark.get(i).getName().contains("Remark")
){
//通过书签获取表格
Table table = (Table) bookMark.get(i).getBookmarkStart().getOwnerParagraph().getNextSibling();
if (table!=null) {
tables.add(table);
// BookMarkUtils.getTableBody(table);
}
}
}
}
public static ArrayList<Bookmark> getBookMark(Document doc){
ArrayList<Bookmark> list = new ArrayList<>();
BookmarkCollection bookmarks = doc.getBookmarks();
for (int i = 0; i < bookmarks.getCount(); i++) {
list.add(bookmarks.get(i));
}
return list;
}
for (int i =0;i<bookMark.size();i++){
Paragraph paragraph = bookMark.get(i).getBookmarkStart().getOwnerParagraph();
if (paragraph.isInCell()){
//通过书签获取表格
Table table = (Table) paragraph.getOwner().getOwner().getOwner();
tables.add(table);
}
}