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. Jacobi并行拆解【补充】

    作者:桂. 时间:2018-04-24  22:04:52 链接:http://www.cnblogs.com/xingshansi/p/8934373.html 前言 本文为Jacobi并行拆解一文 ...

  2. Intellij Idea生成serialVersionUID的方法

    默认情况下Intellij IDEA是关闭了继承了java.io.Serializable的类生成serialVersionUID的警告.如果需要ide提示生成serialVersionUID,那么需 ...

  3. Android 架构师技能图谱(转载)

    架构与设计 设计模式 重构 技术选型 特性 可用性 性能 包大小 方法数 文档 技术支持 UI架构模式 MVC MVP MVVM 研发工具 集成开发环境 Android Studio Sublime ...

  4. SQLServer中进行sql除法运算结果为小数时显示0的解决方案

    转自:http://blog.sina.com.cn/s/blog_8020e41101019k7t.html SELECT field1/field2 FROM TB; 当 field1的数值 &g ...

  5. sql server获取时间格式

    在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate()  用DateName()就可以获得相应的年.月.日,然后再把它们连接起来就可以了: ...

  6. 解决jar格式文件,双击不能直接运行问题

    前提:  安装了JDK 步骤: 1.先右击jar文件,打开方式->选择默认程序->浏览,选中jre下bin文件中javaw.exe(比如我的javaw.exe在C:\Program Fil ...

  7. 【Android】LayoutInflater

    LayoutInflater的作用 LayoutInflater的作用类似于findViewById(). 不同点是: LayoutInflater是用来找res/layout/下的xml布局文件,并 ...

  8. ansible报错:Failed to connect to the host via ssh: Permission denied

    原因: 没有在ansible管理节点(即安装ansible的节点)上添加目标节点(即需要管理的节点)的ssh认证信息. 解决办法: 1.在管理节点生成公钥 ssh-keygen 路径为:~/.ssh/ ...

  9. python 获取环境变量

    python 获取环境变量 参考 https://docs.python.org/2/library/os.html 使用os.environ获取环境变量字典 import os env_dist = ...

  10. Django 查询时间段 时间搜索 过滤

    Django 查询时间段 1.大于某个时间 gt now = datetime.datetime.now()start = now – datetime.timedelta(hours=23, min ...