【jacob word】使用jacob,合並多個word為一個word文件


將幾個word文件合並到一個word文件,使用注意點:

1.后面附項目運用的jar包jacob-1.9,

2.並且jacob運用中,需要將附件內的jacob.dll放到windows/system32下

 

語法介紹:

將一個關於JACOB的代碼分成下面幾個步驟:

    1) ActiveXComponent ax = new ActiveXComponent("a1");//構建ActiveX組件實例

    其中的a1的值和你需要調用的ActiveX控件有關

MS控件名

a1的值

InternetExplorer

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 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM