jacob配置以及使用说明

来源:互联网 发布:考驾照软件手机软件 编辑:程序博客网 时间:2024/06/06 03:36

1.jdk使用jdk1.6.0_22

2.jacob.dll放在..\jdk1.6.0_22\jre\bin目录下

3.eclipse的jre版本要和jdk一致,window->preferences->java->compiler勾选jdk 1.6

4.window->preferences->java->InstalledJREs->Add  配置成jdk1.6.0_22版本 然后勾选上 点击ok、

5.在项目目录下新建lib目录,将jacob.jar文件拷贝到该目录下,点build path->configbuild path ->libraries

 1)Add JARs->选择lib目录下的jacob.jar点击Ok

 2)移除项目原来的JRE System Library ,AddLibrary->JRE System Library 选择之前添加的jdk1.6.0_22 ,点击finish

点击ok,libraries配置完毕;如下图

备注:1.jacob.jar不要放到jdk的目录下,可能有冲突

     2.jacob.dll经测试放在..\jdk1.6.0_22\jre\bin下被成功引用,其他目录建议不放,防止出现奇葩问题,(可自己测试在其他目录下,会不会出事)。

     3.出现Can'tco-create object问题,可能是之前调用dll后,没有释放资源,需要加入如下代码

先导入importcom.jacob.com.ComThread;//在jacob1.9版本里有这个类,1.6和1.7版本经测试无法导入此类

               ComThread.InitSTA();// 初始化COM线程

               // 以下操作word代码

               MSWordManager ms=new MSWordManager(false);

               //生成一个MSwordManager对象,并且设置显示Word程序

               ms.openDocument("D:\\12.doc");

               //创建一个新的.doc文件

               ms.putTxtToCell(1, 1, 2, "!!!!");

               //插入文本

               ms.save("D:\\12.doc");

               //保存.doc文件

               ms.close();

               ms.closeDocument();

               // 以上操作word代码

               ComThread.Release();// 操作完成后,释放COM线程

       4.以下代码可以避免上述Can't co-create object问题

,在finally中释放资源

              ActiveXComponentapp = new ActiveXComponent("Word.Application"); // 启动word

              StringinFile = "D:\\123.doc"; // 要替换的word文件

              try{

                     app.setProperty("Visible",new Variant(false)); // 设置word不可见

                     Dispatchdocs = app.getProperty("Documents").toDispatch();

                     Dispatchdoc = Dispatch.invoke(

                                   docs,

                                   "Open",

                                   Dispatch.Method,

                                   newObject[] { inFile, new Variant(false),

                                                 newVariant(false) }, new int[1]).toDispatch();

                     //打开word文件,注意这里第三个参数要设为false,这个参数表示是否以只读方式打开,

                     //因为我们要保存原文件,所以以可写方式打开。

 

                     Dispatchselection = app.getProperty("Selection").toDispatch();// 获得对Selection组件

                     Dispatch.call(selection,"HomeKey", new Variant(6));// 移到开头

                     Dispatchfind = Dispatch.call(selection, "Find").toDispatch();// 获得Find组件

                     Dispatch.put(find,"Text", "name"); // 查找字符串"name"

                     Dispatch.call(find,"Execute"); // 执行查询

                     Dispatch.put(selection,"Text", "111"); // 替换为"111"

 

                     Dispatchfind1 = Dispatch.call(selection, "Find").toDispatch();// 获得Find组件

                     Dispatch.call(selection,"HomeKey", new Variant(6));// 移到开头

                     Dispatch.put(find1,"Text", "8位随机生成密码"); // 查找字符串

                     Dispatch.call(find1,"Execute"); // 执行查询

                     Dispatch.put(selection,"Text", "222");

 

                     StringnewFileName = "D:\\temp.doc";

                     Dispatch.call(doc,"SaveAs", newFileName); // 另存文件

                     Dispatch.call(doc,"Close", new Variant(false));

                     System.out.println("isover");

              }catch (Exception e) {

                     e.printStackTrace();

              }finally {

                     app.invoke("Quit",new Variant[] {});

                     app.safeRelease();

              }

              5.workspace中的代码要求D盘根目录下有123.doc文件才能运行,否则会一致搜索不到相关词汇

0 0