在java中使用Jawin组件访问Windows下的COM组件 java调用ole

  环境:windows XP Home版;Office2000;j2se 1.6.0(JRE也是1.6.0);Jawin 2.0-alpha1。

原由:使用Jacob访问windows下的COM组件的试验老是不成功(后来搜索到http://blog.sina.com.cn/u/435ce819010002r0,按他的办法据说可以成功),折腾了我一天。网上有说使用Jawin的,我试了一试就成功了,比Jacob顺利多了。据说Jawin比Jacob功能强大。
 

4.注意:

在JNative中用了JDK1.5的一些特性,如枚举、静态引入等,所以在JDK1.4下是不能用的。

二.在程序用jawin调用window的dll

jawin 可以对dll中的方法进行调用,也可以调用com中的方法.内部还提供了一个工具,直接对 com组件导出成 java的类,个人认为很方便。

下面是我们作的一个测试,很顺利便通过了。

1、下载jawin:http://jawinproject.sourceforge.net/。

2、配置:

    a.将jawin.jar放于%JAVA_HOME%\jre\lib\ext下 。

    b.将jawin.dll放于c:\winnt\system32下。否则将出现错误:COMException : no jawin in java.library.path;

    也可将jawin.dll放于每个项目目录下。

 

   c.至此在Editplus中调试Jawin/NJawin的例子,可以通过。 而在Eclipse中有时还会出上面的错误:COMException : no jawin in java.library.path。

   d.在Eclipse中,菜单->window->preference->Java->installed JREs 将原来的remove,重新建一个指到你的java sdk目录。  ok了。

 3、程序测试:

 

import org.jawin.FuncPtr;

 

import org.jawin.ReturnFlags;

 

public class GfJawinTest {

 

       public static void main(String[] args) {

 

              try {

 

                     FuncPtr msgBox = new FuncPtr("USER32.DLL", "MessageBoxW");

                     msgBox.invoke_I(0, "Hello From a DLL", "From Jawin", 0, ReturnFlags.CHECK_NONE);

              } catch (Exception e) {

 

                     e.printStackTrace();

 

              }

 

       }

 

}

 

 

4.利用jawin调用com组件, 如word:

//创建word

import org.jawin.DispatchPtr;

import org.jawin.win32.Ole32;

public class CreateWord {

 

       public static void main(String[] args) {

              try {

                     Ole32.CoInitialize();//                   初始化

                     DispatchPtr app = new DispatchPtr("Word.Application");//               创建word对象

                     app.put("Visible",true); //                     使word可见

                     DispatchPtr docs=(DispatchPtr)app.get("Documents"); //                 获得document对象集合

                     DispatchPtr doc=(DispatchPtr)docs.invoke("Add");  //                    新增一个文档

                     app.invoke("Activate"); //                    激活当前文档

                    

                     DispatchPtr objTextFont=(DispatchPtr)((DispatchPtr)doc.get("Content")).get("Font");

//                   取得Font对象

                     objTextFont.put("Name","黑体");

//                   设置字体

                     objTextFont.put("Size","48");

//                   设置字号

                     DispatchPtr docSelection=(DispatchPtr)app.get("Selection");

//                   取得Selection对象

                     docSelection.invoke("TypeText","Jawwintesttext!\nJawin测试文本。");

//                   使用TypeText方法添加文本

                     doc.invoke("SaveAs","d:\\jawintest.doc");

//                   保存文档(保存在C盘根目录下)

                     doc.invoke("Close");

//                   关闭当前文档,去掉前面的注释符并重新编译后可生效

                     app.invoke("Quit");

//                   退出Word,去掉前面的注释符并重新编译后可生效

 

                    

                     Ole32.CoUninitialize(); //                     释放对象

              } catch (Exception e) {

                     e.printStackTrace();

              }

       }

 

}

 

//打开word

import org.jawin.DispatchPtr;

import org.jawin.win32.Ole32;

 

public class OpenWord {

       public static void main(String[] args) {

              try {

                     Ole32.CoInitialize();

                     DispatchPtr app = new DispatchPtr("Word.Application");

                     app.put("Visible", true);

                     DispatchPtr docs = (DispatchPtr) app.get("Documents");

                     DispatchPtr doc = (DispatchPtr) docs.invoke("Open", "d:\\word.doc");

                     Ole32.CoUninitialize();

              } catch (Exception e) {

                     e.printStackTrace();

              }

       }

}

 

//调用word中的另存为,保存为.html

import org.jawin.DispatchPtr;

import org.jawin.win32.Ole32;

 

public class Word2Html {

       public static void main(String[] args) {

 

              String path = "e://17001939578.doc";

              int iPos = path.lastIndexOf(".");

              String fileExtName = path.substring(iPos + 1);

              String fileMainName = path.substring(0, iPos);

              fileExtName = fileExtName.toLowerCase();

              try {

                     Ole32.CoInitialize();

                     // 初始化

                     DispatchPtr app = new DispatchPtr("Word.Application");

                     // 创建word对象

                     app.put("Visible", false);

                     // 设置word不可见

                     DispatchPtr docs = (DispatchPtr) app.get("Documents");

                     // 取得Documents对象

                     DispatchPtr doc = (DispatchPtr) docs.invoke("Open", path);

                     // 打开指定的word文件

                     doc.invoke("SaveAs", fileMainName + ".html");

                     // 另存为HTML文件

                     app.invoke("quit");

                     // 关闭word

                     Ole32.CoUninitialize();

                     // 释放对象

                     System.out.println("\n转换完成!");

                     System.out.println("\n文件名:" + fileMainName + ".html");

              } catch (Exception e) {

                     System.out.println("\n该文件不存在!或者其他错误(如:运行环境问题)!");

              }

       }

}

 

转自:http://blog.163.com/a13151055695@126/blog/static/11208707420109145928636/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值