`
zoutuo1986
  • 浏览: 179216 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

jacob and winword.exe

 
阅读更多
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");

 

分享到:
评论

相关推荐

    jacob-1.18.zip + jacob-1.19.zip + jacob-1.20.zip 最新版本(包含dll文件)

    1.将jacob-1.18.zip下载解压,在文件夹中找到jacob-1.18-x64.dll,jacob-1.18-x86.dll,jacob.jar 2.通过 pom.xml 新增 &lt;groupId&gt;com.hynnet&lt;/groupId&gt; &lt;artifactId&gt;jacob &lt;version&gt;1.18 3. 如果是32位系统...

    Excel、Word转PDF时,异常com.jacob.com.ComFailException: Invoke of: SaveAs

    标题中的“Excel、Word转PDF时,异常com.jacob.com.ComFailException: Invoke of: SaveAs”是一个关于在编程环境中转换Microsoft Office文档(如Excel和Word)为PDF格式时遇到的错误。这个错误通常与使用Jacob库进行...

    com.jacob:1.19.rar 下载

    对于Windows环境,这通常包括jacob.dll和对应的本地化版本(如jacob-xx.dll,xx为语言代码)。 接下来,让我们了解如何使用Jacob。Jacob提供了Java调用COM接口的能力,通过Jacob,你可以创建和操作COM对象,如下所...

    jacob-1.18.rar

    例如,`com.jacob.activeX.ActiveXComponent app = new com.jacob.activeX.ActiveXComponent("Word.Application");` 这行代码就会启动一个新的Word应用实例。 2. ComThread:在Java中,由于线程安全性的限制,不能...

    jacob-1.14.3.jar、jacob-1.14.3-x64.dll

    3. 在代码中导入Jacob的相关类,如`com.jacob.activeX.ActiveXComponent`,然后创建实例,通过这些实例来调用COM组件的方法。 4. 处理可能的错误和异常,因为COM调用可能会抛出异常,尤其是在处理Office文件时,如...

    jacob语音生成文件,jacob x64.dll和jacob.jar 为1.9

    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

    com.jacob.jacob_1.10jar包下载.zip

    《深入理解Java Jacob库:解析com.jacob.jacob_1.10.jar包》 在Java编程中,有时候我们需要与Windows API进行交互,比如自动化办公文档处理、打印任务或者访问硬件设备等。这时,Java Jacob库(Java和COM Bridge)...

    jacob_1.14.3.rar

    内涵jacob_1.14.3-x64.dll;jacob_1.14.3-64.jdk(maven地址);解决方法:Could not initialize class com.jacob.com.ComThread

    jacob-1.18.jar/dll maven

    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%\...

    jacob-1.19.zip

    解压后,你需要将对应的dll文件(如jacob.dll)放入系统的PATH环境变量中,确保Java运行时能够找到。同时,将Jacob的Java源码加入到项目的类路径中。 接下来,你需要在Java代码中导入Jacob的相关类,如`...

    jacob.jar1.19及使用方法

    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:\...

    jacob-1.14.3.jar 包 ,内含有相关资料以及常见错误解决方案 !

    2. 如果你的系统是64位的,可能还需要添加对应的dll文件(例如,jacob.dll)到系统路径,因为Jacob在运行时需要这个本地库。 3. 创建`DynamicDispatchObject`实例,这通常是COM对象的根,比如`ActiveXObject`。 4. ...

    jacob-1.18.zip

    1. **加载COM组件**:通过`com.jacob.com.ComThread.InitMTA()`或`com.jacob.com.ComThread.InitSTA()`方法初始化线程模型,然后使用`com.jacob.activeX.ActiveXComponent`类创建COM对象实例。 2. **调用COM方法**...

    jacob-1.14.3.jar

    使用jacob-1.14.3.jar之前,确保已经正确配置了环境,包括将对应的DLL文件放置在系统路径下,以及在Java项目中添加对jar包的引用。在开发过程中,可以利用JACOB提供的JacobObject类作为所有COM对象的基类,通过它的...

    jacob-1.16.zip

    1. 初始化COM自动化:使用`com.jacob.com.ComThread.initMTA()`或`com.jacob.com.ComThread.initSTA()`初始化多线程或单线程的COM环境。 2. 创建Word应用对象:通过`com.jacob.activeX.ActiveXComponent`类的构造...

Global site tag (gtag.js) - Google Analytics