【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下
package aaatest; import java.util.ArrayList;
import java.util.List; import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant; public class WordTest { public static void main(String[] args) {
List list = new ArrayList();
String file1= "D:\\2.doc";
String file2= "D:\\1.doc";
//String file3= "D:\\2.docx";
list.add(file1);
list.add(file2);
//list.add(file3);
uniteDoc(list,"d:\\file.doc");
}
public static void uniteDoc(List fileList, String savepaths) {
if (fileList.size() == 0 || fileList == null) {
return;
}
//打开word
ActiveXComponent app = new ActiveXComponent("Word.Application");//启动word
try { // 设置word不可见 ---也就是设置ActiveXComponent对象的一个属性
app.setProperty("Visible", new Variant(false));
//获得documents对象----Variant。toDispatch()
Object docs = app.getProperty("Documents").toDispatch();
//打开第一个文件
//功能调用,对ActiveX对象docs的"Open"属性执行Dispatch.Method(Dispatch.Put\Dispatch.Get等)操作,执行后"Open"的值为参数4,参数5为错误参数码常定义为new int[1],(注:call、get和put方法都是通过该方法实现的)
Object doc = Dispatch
.invoke(
(Dispatch) docs, //调用目标
"Open",
Dispatch.Method,
new Object[] { (String) fileList.get(0),new Variant(false), new Variant(true) }, //参数4
new int[3]).toDispatch();//参数5
//追加文件
//和上面一样,不过换种通俗的解释:参数1就是这个invoke方法的主题操作对象,参数2就是要对参数1执行的方法的名字,参数3就是参数2这个方法的具体操作;参数4就是一系列的参数;参数5为错误参数码常定义为new int[1]
for (int i = 1; i < fileList.size(); i++) {
Dispatch.invoke(
app.getProperty("Selection").toDispatch(),//参数1
"insertFile", //参数2
Dispatch.Method, //参数3
new Object[] {(String) fileList.get(i), "",new Variant(false), new Variant(false),new Variant(false) },//参数4
new int[3]);//参数5
}
//保存新的word文件
Dispatch.invoke(
(Dispatch) doc,
"SaveAs",
Dispatch.Method,
new Object[] { savepaths, new Variant(1) },
new int[3]);
Variant f = new Variant(false);
Dispatch.call((Dispatch) doc, "Close", f);//该方法和get方法非常类似,他是把"Close"属性赋值给f
} catch (Exception e) {
throw new RuntimeException("合并word文件出错.原因:" + e);
} finally {
app.invoke("Quit", new Variant[] {});
}
}
}
【jacob word】使用jacob,合并多个word为一个word文件的更多相关文章
- Java操作Microsoft Word之jacob
转自: 现在我们一起来看看,用Java如何操作Microsoft Word. jacob,官网是http://danadler.com/jacob 这是一个开源的工具.最新版本1.7 官方 ...
- 基于java 合并.doc和docx格式的Word文件
注:摘录自 https://www.cnblogs.com/shenzhouyh/articles/7243805.html 之前用过jacob 合并.doc,但是是有jacob有弊端: 服务器必须是 ...
- 一个word合并项目的分布式架构设计
一个word合并项目的分布式架构设计 项目背景与问题起源 我们要给一个客户做word生成报告以及报告合并的工作,要合并的报告非常多,而且每个报告也比较大,一个多的报告大概有200页以上.我们用c#操作 ...
- Word文档合并
Word文档合并的一种实现 今天遇到一个问题,就是需要把多个Word文档的内容追加到一个目标Word文档的后面,如果我有目标文档a.doc以及其他很多个文档b.doc,c.doc…等等数量很多.这 ...
- java使用freemarker模板导出word(带有合并单元格)文档
来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...
- C# 实现将多个word文档合并成一个word文档的功能
前段时间项目上遇到这么一个需求,需要将多个OCR识别的word文档合并成一个,于是就在网上找了找,自己修改了一下.在这里跟大家分享一下,希望有用的到的. 要做多word文档合并,首先要导入Micros ...
- 多个 Word 文档合并为一个
如果您工作中经常要跟 Word 文档打交道,时不时的您可能需要将多个 Word 文档合并为一个.信息量少的时候,我们可以直接使用复制粘贴.除此之外,还有没有其它办法呢? 借助word2010/2007 ...
- C# 利用WORD模板和标签(bookmark) 批量生成WORD
前言: 由于对C#操作WORD不熟悉,也就留下这么一篇水文,别吐糟...=_=||| 利用Microsoft.Office.Interop.Word (2003版也就11版)——因为部分客户端还是用O ...
- C# 复制一个Word文档的部分或全部内容到另一个Word文档
C# 复制一个Word文档的部分或全部内容到另一个Word文档 我最近喜欢折腾Office软件相关的东西,想把很多Office软件提供的功能用.NET来实现,如果后期能把它用来开发一点我自己的小应用程 ...
随机推荐
- Android内核开发:系统启动速度优化-Android OS启动优化(转)
Android系统的启动优化主要分为三大部分: (1) Bootloader优化 (2) Linux Kernel的剪裁与优化 (3) Android OS部分的剪裁与优化 本文重点关注Android ...
- 在Sublime Text3 开发Node.js遇到的一个小问题
原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 以前的Sublime Text 2包管理出现问题了,不能安装新包,让人开发很捉急,今天装了个3,这个问题解决了 那我们就 ...
- string,const char*,char*之间的相互转换
1. string转const char* string s = "abc"; const char* c_s = s.c_str(); 2. const char*转string ...
- [POJ1383]Labyrinth
[POJ1383]Labyrinth 试题描述 The northern part of the Pyramid contains a very large and complicated labyr ...
- Procrustes Analysis普氏分析法
选取N幅同类目标物体的二维图像,并用上一篇博文的方法标注轮廓点,这样就得到训练样本集: 由于图像中目标物体的形状和位置存在较大偏差,因此所得到的数据并不具有仿射不变性,需要对其进行归一化处理.这里采用 ...
- HDU 1708 简单dp问题 Fibonacci String
Fibonacci String Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 使用twisted.web实现代理服务器
简单的实现谷歌的代理: 架构就是下面这么简单. ================= my server outside GFW | <----------------------> ...
- Python中请使用isinstance()判断变量类型
一.isinstance() 在Python中可以使用type()与isinstance()这两个函数判断对象类型,而isinstance()函数的使用上比type更加方便. # coding=utf ...
- iOS 中通过使用Google API获得Google服务
最近使用了google drive这个云存储,官方指导网址为 https://developers.google.com/drive/ios/ . 官方库代码网址为 http://code.googl ...
- java 和 objective-c 动态获得类型信息
详细信息,请参看android官方文档中的class类的介绍 ,和苹果的官方文档Objective-C Runtime Reference java中常常听到反射reflection,在java的cl ...