使用jacob合并多个word为单个word

1导入jar  包,我使用的是1.7,dil文件一定要和jar包匹配

使用前操作
    1、把dll文件放在%JAVA_HOME%\bin下(注意系统是32位还是64位),
    也可以放在C:\Windows\System32下,如果是64位应该放在C:\Windows\SysWOW64 下。建议放在jdk的bin目录下
    2、如果是在eclipse下开发,需要重新引入jdk(Preference/Java/Installed JREs)
    3、开发时将jacab.jar包放在项目lib下并add到liabraries中即可。

测试用例: 我在我两台电脑上都部署了,但不知为啥,一台运行出现异常

package com.dyz.test;

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 TestWord {

	public static void main(String[] args) {
		List list = new ArrayList();
		String file1 = "D:\\file1.doc";
		String file2 = "D:\\file2.doc";
		//String file3 = "D:\\file3.doc";
		list.add(file1);
		list.add(file2);
		//list.add(file3);
	//	System.out.println(System.getProperty("java.library.path"));
		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不可见
			app.setProperty("Visible", new Variant(false));
			// 获得documents对象
			Object docs = app.getProperty("Documents").toDispatch();
			// 打开第一个文件
			Object doc = Dispatch
					.invoke((Dispatch) docs,
							"Open",
							Dispatch.Method,
							new Object[] { (String) fileList.get(0),
									new Variant(false), new Variant(true) },
							new int[3]).toDispatch();
			// 追加文件
			for (int i = 1; i < fileList.size(); i++) {
				Dispatch.invoke(app.getProperty("Selection").toDispatch(),
						"insertFile", Dispatch.Method, new Object[] {
								(String) fileList.get(i), "",
								new Variant(false), new Variant(false),
								new Variant(false) }, new int[3]);
			}
			// 保存新的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);
		} catch (Exception e) {
			throw new RuntimeException("合并word文件出错.原因:" + e);
		} finally {
			app.invoke("Quit", new Variant[] {});
		}
	}

}
时间: 2024-08-10 12:45:07

使用jacob合并多个word为单个word的相关文章

【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的值 InternetE

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

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

利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

先下载jacob.jar包. 解压后将jacob.dll放到windows/system32以下或\jre\bin以下. 将jacob.jar增加项目. 这样项目的环境基本上搭建完毕,接下来就是书写相关的代码: /** * 传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段.Value代表用来替换的值. * word模板中全部要替换的字段(即HashMap中的Key)以特殊字符开头和结尾. * 如:$code$.$date$--.以免执行错误的替换. * 全部要替换为图片

生成word附件和word域动态赋值

生成word文档和word域动态赋值,很多时候需要生成这样的word文档供下载和打印,先制作一个包含了域的 word的模板附件,放在服务器端或者字节流存入数据库,以供需要的时候代码可以获取到,如: 其中右击每个域可以选择编辑域,修改域的名称: 获取到保存在数据库中的word模板内容: // DocAttachFile为数据库存放这个word附件的表对应的实体,通过这个实体类的content属性对应表的content字段获取到word的内容DocAttachFile docAttachFile =

Word Search 和 Word Search Ⅱ

Word Search 和 Word Search Ⅱ Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighbo

POI 读取word (word 2003 和 word 2007) (转)

最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97.2003.2007的,这三个版本存储数据的格式上都有相当大的差别,而现在 97 基本上已经退出市场,几乎没有人用这个版本了, 所以在我们的系统中只考虑 2003 版本和 2007 版本的,因为我们只要求能够读取 word 中的文字内容即可,其中的文字样式.图片等信息可以忽略,也不用直接操作 word 文件, 所以我们选择 用 apache 的 POI 进行读取. 读取 20

C#,WPF使用word模板导出word文档

使用word模板导出word文档,首先需要在word模板中插入书签: 根据创建的书签名和位置,将需要写入的内容插入到word文件中. 需要引用  Microsoft.Office.Interop.Word;在添加引用-程序集中搜索可以找到. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Windows; usin

OpenXml操作Word的一些操作总结.无word组件生成word.

OpenXml相对于用MS提供的COM组件来生成WORD,有如下优势: 1.相对于MS 的COM组件,因为版本带来的不兼容问题,及各种会生成WORD半途会崩溃的问题. 2.对比填满一张30多页的WORD来说(包含图,表等),用COM组件来生成会占用20秒,Openxml1秒. 3.MS Word软件太贵了,你的客户装的是开源WORD,如LibreOffice,OpenOffice.这样你就只能用Openxml生成的WORD文档,各种支持MS Word都能打开,避免客户机器上安装MS Word.

使用java Apache poi 根据word模板生成word报表

项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现. 目前功能还比较简单,一些复杂的表格做不了,但是已经基本满足项目需求了. 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https://download.csdn.net/download/u012775558/10306308 注意,仅支持docx