前言
JACOB(java -com bridge)是一个 JAVA到微软的COM接口的桥梁。使用JACOB允许任何JVM访问COM对象,从而使JAVA应用程序能够调用COM对象。关于JACOB的很多基础知识网上也是很多文章介绍,我也是根据这些资料进行开发的。粘上两个我保存的文章
jacob的使用方法总结
java操作word文档(jacob)
本文主要是讲解当遇到网上查找不到的word方法时候,需要怎么处理,以及自己使用过程中的注意事项。
遇到的问题
网上关于JACOB的介绍很多,但是都是基础功能没有官方的API介绍,很多别人没有实现过的功能就无从下手。加上JACOB调用WORD的功能都是通过反射进行实现,所以根本无法进行源码查看进行分析。实际上在我的理解,是JACOB只是实现了一个java操作WORD的桥梁,但是具体如何操作他是很灵活没有具体对应方法实现。
解决办法
micrsoft开发人员支持
既然JACOB只是提供桥梁给我们,那么具体的方法我们只有去微软官方网站上进行查询了,上面是微软开发支持网站链接。虽然目前我用到的功能不多,但是我很负责任的告诉大家,只要WORD上面有的功能,都可以通过JACOB来实现。
示例
上图是一个WORD限制书签区域无法编辑后,停止保护后出现的情况,可以看到有阴影背景部分就是之前允许编辑的部分,现在有个需求就是要将阴影的背景去掉(不要问为什么会有这种需求)。那么我们如何实现呢,在WORD中操作很简单的,如下图所示
关键是我们用代码怎么实现,那么我们需要去刚的网站上查找对应的方法,
我找了很久啊,终于找到一个Editor对象,(图上错了)
我们再看他的方法有一个叫做DeleteAll的方法,官方给出的描述是“下面的示例删除第一个用户在活动文档 Editors 集合中的所有编辑权限。”和我们上图要实现的WORD中的操作描述基本一致,基本上可以确定这个方法就能让我们的阴影部分消失。
那么我们怎么来调用这个方法呢
1、首先当然是获取到Editor这个对象,
当然是在API里面找了,上面就找到,上面的意思就是 通过Editors的Item方法就可以获取到一个Editor对象,那么代码就是如下Dispatch selection = Dispatch.get(app, "Selection").toDispatch(); Dispatch editors = Dispatch.call(selection, "Editors").toDispatch(); Dispatch edit = Dispatch.call(editors, "Item", new Variant(-1) ).toDispatch();
至于上面的new Variant(-1) ,也是从上图中得到的。然后再调用editor对象的deleteAll方法就好了,代码如下Dispatch.call(edit, "DeleteAll")
至此已经实现了我们想要的效果了,如果还需要其他的一些骚操作,可以按照上述的方法进行查询使用。