http://setting.iteye.com/blog/747295

————————————————————————————————————————————————

这几年,做了很多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文件:

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

SWT中ole/activex实践--操作word的一个例子的更多相关文章

  1. C#中使用Spire.docx操作Word文档

    使用docx一段时间之后,一些地方还是不方便,然后就尝试寻找一种更加简便的方法. 之前有尝试过使用Npoi操作word表格,但是太烦人了,随后放弃,然后发现免费版本的spire不错,并且在莫种程度上比 ...

  2. 针对Oracle数据库中SCOTT方案的多表查询一个例子

    查询出每个员工的姓名.职位.月薪.所属部门名.月薪等级及其领导的姓名.职位.所属部门名.月薪等级.select e.ename 员工姓名,e.job 员工职位,e.sal 员工月薪,d.dname 员 ...

  3. 转发:VB程序操作word表格(文字、图片)

    很多人都知道,用vb操作excel的表格非常简单,但是偏偏项目中碰到了VB操作word表格的部分,google.baidu搜爆了,都没有找到我需要的东西.到是搜索到了很多问这个问题的记录.没办法,索性 ...

  4. C# 操作Word 中的OLE——插入、编辑、读取 OLE

    概述 OLE,Object Linking and Embedding,即对象连接与嵌入.我们在设计程序时,OLE可以用来创建复合文档,把文字.声音.图像.表格.应用程序等类型的信息组合在一起,在Wo ...

  5. 2.QT中操作word文档

     Qt/Windows桌面版提供了ActiveQt框架,用以为Qt和ActiveX提供完美结合.ActiveQt由两个模块组成: A   QAxContainer模块允许我们使用COM对象并且可以 ...

  6. 在C#中使用Spire.doc对word的操作总结

    在C#中使用Spire.doc对word的操作总结 在最近的工程中我们要处理一些word文档.通过在网上的大量搜索,我发现大多数软件功能不是不完整就是有重复.极少数可以完全实现的word组件又要收费. ...

  7. C#中操作Word(1)—— word对象模型介绍

    一.开发环境布置 C#中添加对Word的支持,只需添加对Microsoft.Office.Interop.Word的命名空间,如下图所示,右键点击“引用”,在弹出的“添加引用”对话框中选中COM标签页 ...

  8. c#中操作word文档-四、对象模型

    转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型  (.Net Perspective) 本文主要针对在Visual St ...

  9. 利用POI操作不同版本号word文档中的图片以及创建word文档

    我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...

随机推荐

  1. Nginx(七):keepalived实现Nginx负载均衡服务器的双机高可用

    前言 之前咱们通过 Nginx(六):Nginx HTTP负载均衡和反向代理的配置与优化 和 Nginx+tomcat组合实现高并发场景的动静分离和负载均衡方案 这两篇文章了解了Nginx对高并发应用 ...

  2. 禁用 Windows 启动时错误恢复的“启动启动修复(推荐)”

    bcdedit /set {default} bootstatuspolicy ignoreallfailures bcdedit /set {current} recoveryenabled No

  3. [Contiki系列论文之2]WSN的自适应通信架构

    说明:本系列文章翻译自Contiki之父Adam Dunkels经典论文,版权归原作者全部. Contiki是由Adam Dunkels及其团队开发的系统.研读其论文是对深入理解Contiki系统的最 ...

  4. Android app 全局异常统一处理

    异常处理需求 Android app 出现 crash 时,会出现 "程序异常退出" 的提示并关闭,体验不好,另外主要是无法知道哪里出现的崩溃,需要知道哪里造成的异常,就需要一个全 ...

  5. 基于Zynq平台的EtherCAT主站方案实现

    作者:陈秋苑 谢晓锋 陈海焕 广州虹科电子科技有限公司 摘 要:EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发.EtherCAT 具有高性能.低成本.容易使用等特点,目前在 ...

  6. 关于CAE的那点儿破事儿【二】

    前面在<关于CAE的那点破事儿>一文中,主要提到了CAE是什么.CAE能做些什么.人在CAE应用中的作用以及CAE从业中应当具有哪些基本素质.然而CAE是一把双刃剑,如果不能在工程应用中很 ...

  7. do-release-upgrade升级笔记

    事后的总结: 后来可能因为阿里云镜像并不是完全底层无关镜像,do-release-upgrade后的18.04版本在经过一次异常的内核版本升级以后,restart失败,因为是虚机还很难处理,不得不直接 ...

  8. pandas数组获取最大值索引的方法-argmax和idxmax

    pandas Series 的 argmax 方法和 idxmax 方法用于获取 Series 的最大值的索引值: 举个栗子: 有一个pandas Series,它的索引是国家名,数据是就业率,要找出 ...

  9. (原创)c++11改进我们的模式之改进观察者模式

    和单例模式面临的是同样的问题,主题更新的接口难以统一,很难做出一个通用的观察者模式,还是用到可变模板参数解决这个问题,其次还用到了右值引用,避免多余的内存移动.c++11版本的观察者模式支持注册的观察 ...

  10. hive的row_number()函数

    hive的row_number()函数 功能 用于分组,比方说依照uuid分组 组内可以依照某个属性排序,比方说依照uuid分组,组内按照imei排序 语法为row_number() over (pa ...