jacob操作word文档

Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。Jacob下载的地址为:

http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368
配置:
(1)将解压包中的jacob.dll(x86常用,x64)拷到windows安装路径下的WINDOWS\system32文件夹下
(2)将jacob.jar文件拷到classpath下即可

(3)检查一下计算机中是否安装office,如果没安装则要安装,因为无论是使用Jacob操作Word还是Excel都需要office支持的!
常见的问题

Exception in thread  "main"  java.lang.UnsatisfiedLinkError: no jacob in java.library.path

出现上面异常是因为没有dll文件

com.jacob.com.ComFailException: Invoke of: Open 

Source: Microsoft Office Word 

出现上面异常是因为文件路径不正确

cant get Object cldid from progid

出现上面的异常是因为机器上没安装word

 

写了一小段代码,用来替换word文档中的文字,粘出来与大家分享!

 

  1. package test;  
  2.   
  3. import com.jacob.com.*;    
  4. import com.jacob.activeX.*;    
  5.   
  6. public class aa {  
  7.     public static void main(String[] args) {  
  8.         ActiveXComponent app = new ActiveXComponent("Word.Application");   //启动word    
  9.         String inFile = "D:\\template.doc";   //要替换的word文件    
  10.         try {    
  11.             app.setProperty("Visible"new Variant(false));   //设置word不可见    
  12.             Dispatch docs = app.getProperty("Documents").toDispatch();  
  13.             Dispatch doc = Dispatch.invoke(docs,"Open",Dispatch.Method,  
  14.                     new Object[] { inFile, new Variant(false),new Variant(false) }, new int[1]).toDispatch();    
  15.             //打开word文件,注意这里第三个参数要设为false,这个参数表示是否以只读方式打开,  
  16.             //因为我们要保存原文件,所以以可写方式打开。    
  17.   
  18.             Dispatch selection = app.getProperty("Selection").toDispatch();//获得对Selection组件  
  19.             Dispatch.call(selection, "HomeKey"new Variant(6));//移到开头  
  20.             Dispatch find = Dispatch.call(selection, "Find").toDispatch();//获得Find组件  
  21.             Dispatch.put(find, "Text""name");       //查找字符串"name"  
  22.             Dispatch.call(find, "Execute");           //执行查询  
  23.             Dispatch.put(selection, "Text""111");  //替换为"111"  
  24.               
  25.             Dispatch find1 = Dispatch.call(selection, "Find").toDispatch();//获得Find组件  
  26.             Dispatch.call(selection, "HomeKey"new Variant(6));//移到开头  
  27.             Dispatch.put(find1, "Text""8位随机生成密码");       //查找字符串  
  28.             Dispatch.call(find1, "Execute");           //执行查询  
  29.             Dispatch.put(selection, "Text""222");  
  30.               
  31.             String newFileName = "D:\\temp.doc";   
  32.             Dispatch.call(doc, "SaveAs",newFileName);  //另存文件  
  33.             Dispatch.call(doc, "Close"new Variant(false));  
  34.             System.out.println("is over");  
  35.             } catch (Exception e) {    
  36.                 e.printStackTrace();  
  37.             }finally{  
  38.                 app.invoke("Quit",new Variant[]{});  
  39.                 app.safeRelease();  
  40.             }  
  41.     }  
  42. }  

 

转自:http://gcguchao8888-sina-com.iteye.com/blog/435516

你可能感兴趣的:(jacob)