【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 }

时间: 2024-10-14 00:53:46

【jacob word】使用jacob,合并多个word为一个word文件的相关文章

Java操作Microsoft Word之jacob

转自: 现在我们一起来看看,用Java如何操作Microsoft Word. jacob,官网是http://danadler.com/jacob 这是一个开源的工具.最新版本1.7 官方的解释是:The JACOB Project: A JAva-COM Bridge 这是官方对下载文件的说明: jacob.jar: a JAR file for the java classes which you must add to your CLASSPATH. The package names r

java操作word (jacob)

什么是jacob? jacob是一个开源项目它允许在java中调用com接口自动组件,它使用JNI(本地调用程序)来进行本地调用COM库.它可运行在x86和支持32位和64位Java虚拟机 X64的环境(摘除自百度词条). 准备工作: 需要的jar包:jacob.jar:此外还需要将jacob.dll放在在windows/system32目录下,否则会报错Could not initialize class com.jacob.activeX.ActiveXComponent. 实例 需要导入的

合并.doc和docx格式的Word文件

注:摘录自 https://www.cnblogs.com/shenzhouyh/articles/7243805.html 之前用过jacob 合并.doc,但是这种只能在windows环境使用,所以弃用了,下面这种方法打开word是html格式的 我遇到的问题是下载并合并附件,这里的附件大多是doc文件,也包含少量的docx文件,但是文件路径是从数据库中读取出来的,均不带后缀名,传统的xwpfdocument和hwpfdocument不能完全解决我的问题:尤其是将文件合并,不能轻易办到,需要

C# 实现将多个word文档合并成一个word文档的功能

前段时间项目上遇到这么一个需求,需要将多个OCR识别的word文档合并成一个,于是就在网上找了找,自己修改了一下.在这里跟大家分享一下,希望有用的到的. 要做多word文档合并,首先要导入Microsoft.Office.Interop.Word这个dll.我觉得很多人会在这个问题上纠结很久,因为找不到这个dll,当然我也这里找了很久才找到,最终我的解决办法是这样的.如果在VS的引用下的COM组件中找不到这个dll,那么,你就在你的电脑上查找这个文件,如果找到了,你可以直接把它复制到你项目中,然

WORD 实现邮件合并

个人理解WORD的邮件合并功能: WORD的邮件合并功能实际上是将某个文档的表格中的所有数据源按变量类别有序插入主文档,得到一系列目的文档的过程. 步骤如下: 其中: 数据源是另一份文档中的表格 第三步打开数据源:邮件--选择收信人--使用现有列表/创建新列表--插入合并域(下拉显示变量名称)--预览结果--完成并合并(--编辑单个文档--全部) 原文地址:https://www.cnblogs.com/jane-lau/p/8495414.html

C# 利用WORD模板和标签(bookmark) 批量生成WORD

前言: 由于对C#操作WORD不熟悉,也就留下这么一篇水文,别吐糟...=_=||| 利用Microsoft.Office.Interop.Word (2003版也就11版)——因为部分客户端还是用Office2003,所以保险起见应该引入低一点的版本 我的需求很简单,从DataTable里面循环取数据批量生成Word文档,解决方案是利用Word模板.dot插入书签并保存为程序使用的模板, 用C#打开word模板修改书签的值并批量生成Word. 遇到的问题: 我的思路是打开模板,然后循环修改书签

通过freemarker出word的技术解决方案_通过点击一个按钮临时实现生成一个word,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

 通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件 详细步骤如下: 模板制作(将要动态显示的数据打上标记,这个标记是freemarker中的EL标记,要注意的是,要控制值为空的情况,下面${(site.wzmc)?default("")}标识当网站名称为空的时候显示空值,如果这里如果不做控制,在实际项目中会显示错误!) 另外

一个word小技巧

最近在进行word格式重拍的时候发现了一个有些恶心的事,怎么去匹配文档里面所有的中文呢? 后来通过网络搜索发现了答案,在word中的查找和替换中有一个选项,可以使用通配符进行匹配. 当我们使用 ([一-龥])^32^13 的时候就可以匹配到一个中文+空格+换行了. 其中,[一-龥],是匹配中文 ^32和^13分别代表了空格和换行符. 特此记录

QTP-创建一个word文件

'创建word实例 Set oWordApp = CreateObject("Word.Application") oWordApp.Visible =True '添加一个word文档 Set oWordDoc = oWordApp.Documents.Add oWordApp.SaveAs "C:\test.docx" oWordDoc.Close oWordApp.Quit '销毁对象引用 Set oWordDoc = Nothing Set oWordApp