Jacob

 

http://imnotceo.blogbus.com/logs/32174360.html


前些日子在公司实习,用到java来批量生成表格并且插入图片,搞得我焦头烂额。主要是用jacob的人可能比较少些(用.net也不多,一般直接几句vc或者vb就可以解决了),网上相关的资料也不多。后来自己琢磨了下,终于搞出了点名堂。在这里分享下。

关于dispatch的几个静态方法 :

 

         call:调用对象方法,其中的第一个参数是对象名,第二个字符串参数就是方法名字,有时会有方法参数。例如:

     Dispatch table=Dispatch.call(tables, "Item", new Variant(1)).toDispatch();

     //相当于执行了vb中的:table=tables.item(1)

 

    get:返回属性,字符串就是属性名称。例如:

Dispatch cols = Dispatch.get(this.table, "Columns").toDispatch();
//相当于执行了vb中的:cols=table.Columns
    
    put:设置属性,第三个参数就是要设置的属性值。例如:

Dispatch.put(selection, "Text", "pinpinILoveYou");
//相当于执行了vb中的:selection.Text="pinpinILoveYou",意为在当前光标插入点插入一个字符串



可能大家会有困惑,就是不知道哪些对象有哪些属性,比如我要在word中设置一张图片格式为透明,但我不知到如何得到这张图片对象,在调用Dispatch的静态方法时,设置它的哪些属性。也就是call,put,get方法中,第二个参数是什么没办法来简单的得到。

我提供大家一个简单的方法,就是 利用word的“vba对象浏览器”配合"录制宏"两个功能来完成java对word的控制。

比如说,我要设置一张图片格式为透明,那么我先在word里录制一段宏,然后在vba里查看这段代码如下:

        Selection.InlineShapes(1).PictureFormat.TransparentBackground = msoTrue
        Selection.InlineShapes(1).PictureFormat.TransparencyColor = RGB(255, 255, 255)
        Selection.InlineShapes(1).Fill.Visible = msoFalse

如果我要用JavaCom桥来执行上面三句代码的话,意味着我必须先获得Selection可编辑区域对象,再获得InlineShapes(1)图形对 象,再获得PictureFormat图片格式对象,最后设置它的两个属性TransparentBackground和 TransparencyColor。具体代码和说明如下:

//--------------设置图片格式透明----------------
        //插入一张图片,其类型为InlineShapes
  Dispatch image = Dispatch.call(Dispatch.get(this.selection, "InlineShapes").toDispatch(),  "AddPicture", imagePath).toDispatch();
        //必须转换为shape类型才能进行图片格式操作
   shape = Dispatch.call(image, "ConvertToShape").toDispatch();
  //得到pictureFormat对象
        Dispatch pictureFormat = Dispatch.call(shape, "PictureFormat").toDispatch();
        Dispatch.put(pictureFormat, "TransparentBackground", true);
  //16进制转换为rgb
        Dispatch.put(pictureFormat, "TransparencyColor", new Variant(0xFFFFFF));
        //如果希望通过图片的透明部分看到图片下面的对象,则必须将图片的 FillFormat 对象的 Visible 属性设为 False。
        Dispatch fillFormat = Dispatch.call(shape, "Fill").toDispatch();     
        Dispatch.put(fillFormat, "Visible", false);
//--------------------结束-----------------------
 


好了,其实其他一些利用jacob操作word的方法都可以利用“先进行宏录制在查看宏的vba代码”来完成。 可能就是调用对象比较繁琐,毕竟底层的运行时不同。

我封装了一些jacob的api,用来操作表格和图片等对象,大家可以 点击下载 。另外有个测试的例子,是我给公司做的一个城管队员执照生成的小程序,涉及到一些算法、word表格和图片的处理等等。 点击下载 。代码稍微有些乱,大家谅解。


如果发现本文有可以纠正的地方或者问题请务必联系我,谢谢!欢迎一起讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值