当前位置: 首页 > news >正文

【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

 

转载于:https://www.cnblogs.com/sxdcgaq8080/p/5659680.html

相关文章:

  • string、wstring、cstring、 char、 tchar、int、dword转换方法(转)
  • 对动画对概念和动画实现的思想的理解
  • pomelo连接redis
  • 推荐几款软件界面模型设计工具
  • BZOJ3189 : [Coci2011]Slika
  • logback日志交给logstash处理
  • Tutorial: Android Wear with Genymotion
  • Maven 版 JPA 最佳实践(转)
  • 软件工程的意识
  • 从Select语句看Oracle查询原理
  • HDU1996 汉诺塔VI
  • Linux-Crontab服务
  • schwarz( 施瓦兹)不等式证明
  • “重定向次数过多”或者“Too many automatic redirections were attempted”的错误:
  • asp.net给asp:button同时添加服务器事件和JS事件
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【React系列】如何构建React应用程序
  • CentOS 7 修改主机名
  • C语言笔记(第一章:C语言编程)
  • JWT究竟是什么呢?
  • MQ框架的比较
  • Python socket服务器端、客户端传送信息
  • Vue小说阅读器(仿追书神器)
  • webpack4 一点通
  • 基于 Babel 的 npm 包最小化设置
  • 记录:CentOS7.2配置LNMP环境记录
  • 限制Java线程池运行线程以及等待线程数量的策略
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​iOS实时查看App运行日志
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)Android布局类型(线性布局LinearLayout)
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .gitignore文件---让git自动忽略指定文件
  • .Net Core和.Net Standard直观理解
  • .NET delegate 委托 、 Event 事件
  • .Net Redis的秒杀Dome和异步执行
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .Net各种迷惑命名解释
  • /proc/stat文件详解(翻译)
  • @Autowired @Resource @Qualifier的区别
  • @Autowired自动装配
  • @Import注解详解
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ C++ ] STL---string类的使用指南
  • [ 第一章] JavaScript 简史
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [codevs 2822] 爱在心中 【tarjan 算法】
  • [docker] Docker的数据卷、数据卷容器,容器互联