public boolean writeWordFile(Map<String,String> writeMap){ boolean flag = false; ActiveXComponent word = null; if(this.wordFile!=null){ try{ //1获得worfFile对象 word = new ActiveXComponent("Word.Application"); Dispatch dispatchTarget = word.getProperty("Documents").toDispatch(); String name = "Open"; int wFlags = Dispatch.Method; //是否进行转换 ConfirmConversions : new Variant(true) //是否只读 :new Variant(false) Object[] oArg = new Object[]{this.wordFile.getPath(),new Variant(true),new Variant(false)}; int[] uArgErr = new int[1]; Dispatch wordfile = Dispatch.invoke(dispatchTarget, name, wFlags, oArg, uArgErr).toDispatch(); //2获得选择器对象 Dispatch vSelection = word.getProperty("Selection").toDispatch(); //3获得表对象 Dispatch tables = Dispatch.get(wordfile, "tables").toDispatch(); //3 for (String loc : writeMap.keySet()) { String[] locs = loc.split(","); int a = Integer.parseInt(locs[0]); int b = Integer.parseInt(locs[1]); int c = Integer.parseInt(locs[2]); try{ //4获得cell Dispatch table = Dispatch.call(tables, "Item", new Variant(a)).toDispatch(); Dispatch cell = Dispatch.call(table, "Cell", new Variant(b),new Variant(c)).toDispatch(); //5获得数据 Dispatch range=Dispatch.get(cell,"Range").toDispatch(); String data=Dispatch.get(range,"Text").getString(); if(data.length()>=2){ data = data.substring(0, data.length()-2); } if(data.length()>0 &&!data.endsWith("\r")){ data=data+"\r"; } //6选中cell,并添加数据 Dispatch.call(cell, "Select"); Dispatch.put(vSelection, "Text", data+writeMap.get(loc)); }catch(Exception e){ continue; } } Dispatch.call(wordfile, "Close", new Variant(-2)); flag = true; }catch(Error e){ if("java.lang.NoClassDefFoundError".equals(e.getClass().getName())){ if("Could not initialize class com.jacob.activeX.ActiveXComponent".equals(e.getMessage())){ LOG.error("word文档中插入意见失败:请将jacob-1.14.3-x86.dll文件放入java.library.path[url=\""+System.getProperty("java.home")+"\\bin\\\"]后重启web服务器"); }else{ LOG.error("相关文档:java后台编辑word文件表格内容的功能开发备忘录、升级说明、使用说明_20141020.doc",e); } }else{ LOG.error("相关文档:java后台编辑word文件表格内容的功能开发备忘录、升级说明、使用说明_20141020.doc",e); } }catch(Exception e){ LOG.error("相关文档:java后台编辑word文件表格内容的功能开发备忘录、升级说明、使用说明_20141020.doc",e); }finally{ if(word!=null){ word.safeRelease(); Dispatch.call(word, "Quit"); } ComThread.Release(); } }else{ System.out.println("initWordFile 办事不利:未生成word文件"); } return flag; }
问题:
运行一次 任务管理器中就多一个winword.exe。
网上有说:ComThread.Release(); word.safeRelease(); 都没用
执行Dispatch.call(word, "Quit");
相关推荐
1.将jacob-1.18.zip下载解压,在文件夹中找到jacob-1.18-x64.dll,jacob-1.18-x86.dll,jacob.jar 2.通过 pom.xml 新增 <groupId>com.hynnet</groupId> <artifactId>jacob <version>1.18 3. 如果是32位系统...
对于Windows环境,这通常包括jacob.dll和对应的本地化版本(如jacob-xx.dll,xx为语言代码)。 接下来,让我们了解如何使用Jacob。Jacob提供了Java调用COM接口的能力,通过Jacob,你可以创建和操作COM对象,如下所...
标题中的“Excel、Word转PDF时,异常com.jacob.com.ComFailException: Invoke of: SaveAs”是一个关于在编程环境中转换Microsoft Office文档(如Excel和Word)为PDF格式时遇到的错误。这个错误通常与使用Jacob库进行...
例如,`com.jacob.activeX.ActiveXComponent app = new com.jacob.activeX.ActiveXComponent("Word.Application");` 这行代码就会启动一个新的Word应用实例。 2. ComThread:在Java中,由于线程安全性的限制,不能...
3. 在代码中导入Jacob的相关类,如`com.jacob.activeX.ActiveXComponent`,然后创建实例,通过这些实例来调用COM组件的方法。 4. 处理可能的错误和异常,因为COM调用可能会抛出异常,尤其是在处理Office文件时,如...
jacob 1.9语音生成文件,jacob x64.dll和jacob.jar 版本为1.9。 jacob.dll放入 C:\Program Files\Java\jdk1.8.0_121\jre\bin jacob.jar通过idea配置到项目dependencies
内涵jacob_1.14.3-x64.dll;jacob_1.14.3-64.jdk(maven地址);解决方法:Could not initialize class com.jacob.com.ComThread
《深入理解Java Jacob库:解析com.jacob.jacob_1.10.jar包》 在Java编程中,有时候我们需要与Windows API进行交互,比如自动化办公文档处理、打印任务或者访问硬件设备等。这时,Java Jacob库(Java和COM Bridge)...
jacob-1.18的资源包还有 jacob-1.18-x64.dll和jacob-1.18-x86.dll. 把对应的windows版本扔到 C:\Windows\System32 并添加环境变量大到path中 “%SYSTEMROOT%\System32\jacob-1.18-x86.dll;”或者 “%SYSTEMROOT%\...
解压后,你需要将对应的dll文件(如jacob.dll)放入系统的PATH环境变量中,确保Java运行时能够找到。同时,将Jacob的Java源码加入到项目的类路径中。 接下来,你需要在Java代码中导入Jacob的相关类,如`...
jacob.jar1.19及使用方法 解压后获得3个文件 jacob.jar jacob-1.17-x64.dll jacob-1.17-x86.dll jacob.jar 放到项目的lib目录 win7 jacob-1.17-x64.dll 放到C:\Windows\System32 jacob-1.17-x86.dll 放到C:\...
2. 如果你的系统是64位的,可能还需要添加对应的dll文件(例如,jacob.dll)到系统路径,因为Jacob在运行时需要这个本地库。 3. 创建`DynamicDispatchObject`实例,这通常是COM对象的根,比如`ActiveXObject`。 4. ...
import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; public class ExcelExample { public static void main(String[] args) { ComThread.InitMTA(true...
1. **加载COM组件**:通过`com.jacob.com.ComThread.InitMTA()`或`com.jacob.com.ComThread.InitSTA()`方法初始化线程模型,然后使用`com.jacob.activeX.ActiveXComponent`类创建COM对象实例。 2. **调用COM方法**...
这个压缩包包含了Jacob的最新版本,即1.20版,包括两个动态链接库(DLL)文件:`jacob-1.20-x64.dll`和`jacob-1.20-x86.dll`,以及Java类库`jacob-1.20.jar`。这些文件分别用于64位和32位的Windows系统,确保了在...
使用jacob-1.14.3.jar之前,确保已经正确配置了环境,包括将对应的DLL文件放置在系统路径下,以及在Java项目中添加对jar包的引用。在开发过程中,可以利用JACOB提供的JacobObject类作为所有COM对象的基类,通过它的...
1. 初始化COM自动化:使用`com.jacob.com.ComThread.initMTA()`或`com.jacob.com.ComThread.initSTA()`初始化多线程或单线程的COM环境。 2. 创建Word应用对象:通过`com.jacob.activeX.ActiveXComponent`类的构造...