`
kimmking
  • 浏览: 536957 次
  • 性别: Icon_minigender_1
  • 来自: 中华大丈夫学院
社区版块
存档分类
最新评论

SWT中ole/activex实践--操作word的一个例子

    博客分类:
  • java
阅读更多

这几年,做了很多word/excel/ppt方面的开发,特别是office插件/vsto/oba,和各种支持activex的ole嵌入环境下的应用。

基本上,了解了office对象模型,就可以在支持ole的环境下游刃有余的使用接口进行开发了。

不过office本身是不支持ole的,一般需要一个native的“外壳”包裹住,然后再在我们开发的环境下ole这个外壳。

例如,web页面或一般环境中,使用dsoframer。SWT中使用OleClientSite。

这里讲讲OleClientSite。

windows下,SWT中(OS类)封装了绝大部分常见的win32 api。而且SWT中的组件都是系统原生的,或是组合的,

所以调用Activex的窗口并交互成为了可能(AWT可以拿到原生窗口的句柄,也能别别扭扭的实现,纯swing不是原生的,所以是拿不到的),

OleClientSite封装了调用Activex并交互的细节。

 

大概的方式是:传给OleClientSite一个Activex的progID,初始化一个Activex,并挂接到制定的composite上,

然后根据容器对Activex调用设置大小长宽。接着,通过一个OleAutomation封装一个Activex中的原生对象的引用指针,

然后可以用getIDsOfNames根据属性名或是方法名获取对应id(做过mfc/atl-activex的都知道这个在IDL文件中注册的id)。

然后可以调用OleAutomation的 getProperty/setProperty/invoke/invokeNoReply 等方法,获取属性或调用相应的方法。

当然返回结果可能还是原生对象,可以继续用OleAutomation包装,然后重复上面的过程。

SWT还提供了一个通用的类型包装器,用来原生的几种常见c类型和java类型的转换:Variant。(很像vb里的那个吧)

 

-------------------------------------  想了解的看SWT源码和com本质论去  -----------------------------------

 

 

 附件是一个嵌入word,并定位word文档中的字符串的例子。

 

ListOLE是传递一个OleAutomation,列出所有方法的工具类。源于网上。

 

txt文件夹提供了word.Application 和 word.Document对象的所有com接口方法和属性。

 

运行Word.java,展示word文件:

 

 http://dl.iteye.com/upload/picture/pic/70372/203108bc-75d0-3460-a372-47e34ca301ab.jpg

点击menu1,搜索定位字符串bbbbb:

http://dl.iteye.com/upload/picture/pic/70370/e61adc5c-95ed-38ea-95ea-5a5bffe88356.jpg 

 

 

分享到:
评论
5 楼 lxmin0702 2015-08-06  
你好,我刚下载了您的附件,但是发现里面并没有正文所提到的ListOLE是传递一个OleAutomation,列出所有方法的工具类。源于网上。



txt文件夹提供了word.Application 和 word.Document对象的所有com接口方法和属性。

可以加您qq请教一下吗?您qq是?

4 楼 cjvs9k 2014-11-05  
爱死你了,楼主!
3 楼 黄奇就 2013-11-14  
ppt呢 怎么弄啊
2 楼 kimmking 2012-06-14  
quangang_deng 写道
请教一下,如果我想把这个控件给加上JPanel 里显示。该如何实现呢。
因为现在我这边做的控件都是在这个控件上面加的。


swing不兼容
1 楼 quangang_deng 2012-06-13  
请教一下,如果我想把这个控件给加上JPanel 里显示。该如何实现呢。
因为现在我这边做的控件都是在这个控件上面加的。

相关推荐

Global site tag (gtag.js) - Google Analytics