將幾個word文件合併到一個word文件,使用注意點:java
1.後面附項目運用的jar包jacob-1.9,windows
2.而且jacob運用中,須要將附件內的jacob.dll放到windows/system32下數據結構
語法介紹:app
將一個關於JACOB的代碼分紅下面幾個步驟:ide
1) ActiveXComponent ax = new ActiveXComponent("a1");//構建ActiveX組件實例ui
其中的a1的值和你須要調用的ActiveX控件有關spa
MS控件名code |
a1的值對象 |
InternetExplorerblog |
InternetExplorer.Application |
Excel |
Excel.Application |
Word |
Word.Application |
Powerpoint |
Powerpoint.Application |
vb/java Script |
ScriptControl |
windows media Player |
WMPlayer.OCX |
Outlook |
Outlook.Application |
Visio |
Visio.Application |
DAO |
DAO.PrivateDBEngine.35 |
MultiFace |
MultiFace.Face |
2) Dispatch ds = ax.getObject(). toDispatch();//獲取Dispatch對象,咱們能夠把每一個Dispatch對象當作是對Activex控件的一個操做,這一步是得到該ActiveX控件的控制權。
(注:淺析JACOB 中提到過Variant類,這裏的ax.getObject()即是得到該對象,咱們將其轉化爲任何對象(類型))
3) Dispatch ds1 = Dispatch.get(ds, "a2").toDispatch(); //獲取該ActiveX對象數據結構中的a2屬性
4) Dispatch d2 = Dispatch.invoke(ds1, "a3", a4, a5, a6).toDispatch(); //功能調用,對ActiveX對象ds1的a3屬性執行a4(Dispatch.Put\Dispatch.Get等)操做,執行後a3的值爲a5,a6爲錯誤參數碼常定義爲new int[1],(注:call、get和put方法都是經過該方法實現的)
5) Dispatch ds2 = Dispatch.put(ds, "a7","a8").toDispatch();//將ActiveX對象ds的屬性a7的值設置爲a8,該方法返回類型同get同樣
6) Dispatch ds3 = Dispatch.call(ds1, "a9", a10);//該方法和get方法很是相似,他是把a9屬性賦值給a10
具體的使用例子【將多個word合併成一個word文檔】:
1》首先將架包jacob-1.9放在lib,build path進項目
2》將jacob.dll放在C:\Windows\System32下
1 package aaatest; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.jacob.activeX.ActiveXComponent; 7 import com.jacob.com.Dispatch; 8 import com.jacob.com.Variant; 9 10 public class WordTest { 11 12 public static void main(String[] args) { 13 List list = new ArrayList(); 14 String file1= "D:\\2.doc"; 15 String file2= "D:\\1.doc"; 16 //String file3= "D:\\2.docx"; 17 list.add(file1); 18 list.add(file2); 19 //list.add(file3); 20 uniteDoc(list,"d:\\file.doc"); 21 } 22 public static void uniteDoc(List fileList, String savepaths) { 23 if (fileList.size() == 0 || fileList == null) { 24 return; 25 } 26 //打開word 27 ActiveXComponent app = new ActiveXComponent("Word.Application");//啓動word 28 try { 29 30 // 設置word不可見 ---也就是設置ActiveXComponent對象的一個屬性 31 app.setProperty("Visible", new Variant(false)); 32 //得到documents對象----Variant。toDispatch() 33 Object docs = app.getProperty("Documents").toDispatch(); 34 //打開第一個文件 35 //功能調用,對ActiveX對象docs的"Open"屬性執行Dispatch.Method(Dispatch.Put\Dispatch.Get等)操做,執行後"Open"的值爲參數4,參數5爲錯誤參數碼常定義爲new int[1],(注:call、get和put方法都是經過該方法實現的) 36 Object doc = Dispatch 37 .invoke( 38 (Dispatch) docs, //調用目標 39 "Open", 40 Dispatch.Method, 41 new Object[] { (String) fileList.get(0),new Variant(false), new Variant(true) }, //參數4 42 new int[3]).toDispatch();//參數5 43 //追加文件 44 //和上面同樣,不過換種通俗的解釋:參數1就是這個invoke方法的主題操做對象,參數2就是要對參數1執行的方法的名字,參數3就是參數2這個方法的具體操做;參數4就是一系列的參數;參數5爲錯誤參數碼常定義爲new int[1] 45 for (int i = 1; i < fileList.size(); i++) { 46 Dispatch.invoke( 47 app.getProperty("Selection").toDispatch(),//參數1 48 "insertFile", //參數2 49 Dispatch.Method, //參數3 50 new Object[] {(String) fileList.get(i), "",new Variant(false), new Variant(false),new Variant(false) },//參數4 51 new int[3]);//參數5 52 } 53 //保存新的word文件 54 Dispatch.invoke( 55 (Dispatch) doc, 56 "SaveAs", 57 Dispatch.Method, 58 new Object[] { savepaths, new Variant(1) }, 59 new int[3]); 60 Variant f = new Variant(false); 61 Dispatch.call((Dispatch) doc, "Close", f);//該方法和get方法很是相似,他是把"Close"屬性賦值給f 62 } catch (Exception e) { 63 throw new RuntimeException("合併word文件出錯.緣由:" + e); 64 } finally { 65 app.invoke("Quit", new Variant[] {}); 66 } 67 } 68 }