网上关于jacob如何操控word的例子已经有很多,但基本没有提到如何读取书签列表。
在这里对此我做点补充,jacob版本是1.17
ActiveXComponent word = new ActiveXComponent("Word.Application");
word.setProperty("Visible", new Variant(true));
Dispatch documents = word.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.call(documents, "Open", "e:/abc.doc").toDispatch();
//书签集合
Dispatch bookMarks = word.call(doc, "Bookmarks").toDispatch();
List lstBookMarks = new ArrayList();
int bCount = Dispatch.get(bookMarks, "Count").getInt();
//将书签列表存放到list + map 结构中
for (int i = 1; i <= bCount; i++) {
Map bookMark = new HashMap();
Dispatch item = Dispatch.call(bookMarks, "Item", i).toDispatch();
String item_name = String.valueOf(Dispatch.get(item, "Name").getString()).replaceAll("null", ""); //读取书签命名
Dispatch range = Dispatch.get(item, "Range").toDispatch();
String item_value = String.valueOf(Dispatch.get(range, "Text").getString()).replaceAll("null", ""); //读取书签文本
if(!item_name.equals("")){
bookMark.put("NAME", item_name);
bookMark.put("TEXT", item_value);
lstBookMarks.add(bookMark);
}
}
....略