【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 N 上 报错:android.os.FileUriExposedException
解决 Android N 上 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/appN ...
- metinfo首页内容简介
http://www.hlbaozhuangji.cn/manage/content/other_info.php?anyid=31&lang=cn 首页内容简介: select * from ...
- windows下使用批处理文件调用python程序
这个随笔涉及到几个批处理脚本得知识点. windows的start命令, 启动另一个窗口运行指定的程序或命令. windows的call命令, 从批处理程序调用另一个程序, 直到被调用程序退出, 再继 ...
- 简论:int i = 0
int i =0; 或许这就是i和0的缘分吧...
- zhx and contest (枚举 + dfs)
zhx and contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- smb
smb编辑 SMB(Server Message Block)是协议名,它能被用于Wap连接和客户端与服务器之间的信息沟通.
- 将服务器上的myql数据库导入本地数据库
文章是从我的个人博客上粘贴过来的, 大家也可以访问 www.iwangzheng.com 首先登录到服务器上,进入文件夹,我们这边的是m-cms $mysqldump -uroot mos > ...
- Missing Ranges & Summary Ranges
Missing Ranges Given a sorted integer array where the range of elements are [lower, upper] inclusive ...
- Search Range in Binary Search Tree
Given two values k1 and k2 (where k1 < k2) and a root pointer to a Binary Search Tree. Find all t ...
- Android Studio项目引入外部库注意事项(PullToRefresh)
Android Studio开发App项目时引入第三方库是个比较麻烦的事情.之前导入Volley就折腾了好久,导入下拉刷新控件PullToRefresh时又碰到了各种问题.在此记录一下,以便查阅. 一 ...