龙空技术网

Java使用Jacob实现将多个Word文档合并为一个Word

双主双机热备 267

前言:

眼前兄弟们对“java生成docx文档”大体比较注重,大家都想要剖析一些“java生成docx文档”的相关知识。那么小编同时在网摘上网罗了一些有关“java生成docx文档””的相关知识,希望姐妹们能喜欢,看官们一起来了解一下吧!

Java使用Jacob实现将多个Word文档合并为一个Word

1、前言

近期总在接触一些导出Word、Excel等等需求。

单纯实现导出问题不大,但是在符合用户要求下可能要下一番功夫。

今天我们就来记录一下:

Java使用Jacob实现将多个Word文档合并为一个Word。

2、Jacob相关信息

Jacob是JAVA-COM Bridge的简写。

允许你利用Java调用COM Automation组件。

它使用JNI对COM库进行本机调用。

Jacob在支持32位和64位JVM的x86和x64环境中运行。

3、补充

关于Jacob更多资料请参考官网。

(1)Jacob项目官方地址:

(2)Jacob下载地址:

4、 简单案例

(1) 解压下载好的Jacob

里面已经提供了我们需要的jar包和dll文件。

注意:

这里dll文件的选择需要根据自己电脑位数。

(2) 导入jar

这里以idea为例

(3) 导入dll文件

放置到自己的...jdk...\bin下面

(4) 简单工具类

暂时没有什么好办法去展现代码。

这里就先截重要方法描述信息。

完整代码最后附上。

Main测试

(5) 测试

文档odysee.docx

文档odyseeWord.doc

执行main函数

查看文档More2OneWordUtil.docx

5、 总结

如果有心细的小友可能会发现odysee.docx这个文档的字段格式{{name}}

是不是像easypoi文档模板,其实就是之前咱们讲过利用easypoi导出Word模板

这里easypoi+Jacob这里其实一个完整的功能需求。

例如:

导出一个部门的人员Word模板,将一个部门的人员Word模板合成为一个Word。

......

tip:

如果大家有其他的方法欢迎留言补充,共同进步。

感谢大家支持。

================================================

简单案例代码

================================================

import com.jacob.activeX.ActiveXComponent;

import com.jacob.com.Dispatch;

import com.jacob.com.Variant;

import java.util.ArrayList;

import java.util.List;

/**

* 功能:合并多个word文件

* 备注:支持doc,docx

* 补充:下载jacob-1.19-x64.dll[配套jar]动态库,配置到jdk.xxx/bin

*/

public class More2OneWordUtil {

/**

* 合并多个word文件

* @param fileList:需要合并的word文件的目录(先放入先显示)

* @param path:合并后word输出路径

*/

public static void convertedWord(List<String> fileList, String path) {

if (fileList.size() == 0 || fileList == null) {

return;

}

ActiveXComponent axc = null;

try {

//启动word

axc = new ActiveXComponent("Word.Application");

} catch (Exception e) {

e.printStackTrace();

}

try {

//设置word不可见

axc.setProperty("Visible", new Variant(false));

//获取documents对象

Object docs = axc.getProperty("Documents").toDispatch();

//打开第一个文件

Object doc = Dispatch.invoke(

(Dispatch) docs,

"Open",

Dispatch.Method,

new Object[] { ((String) fileList.get(0)).replaceAll(" ", ""),new Variant(false), new Variant(true) },

new int[3]).toDispatch();

// 把插入点移动到文件首位置

// Dispatch.call(selection, "HomeKey" , new Variant(6));

// 把插入点移动到文件end位置

Dispatch.call(

axc.getProperty("Selection").toDispatch(),

"EndKey",

new Variant(6));

// 追加文件

for (int i = 1; i < fileList.size(); i++) {

try {

Dispatch.invoke(

axc.getProperty("Selection").toDispatch(),

"insertFile",

Dispatch.Method,

new Object[] {((String) fileList.get(i)).replaceAll(" ", ""), "",new Variant(false), new Variant(false),new Variant(false) },

new int[3]);

}catch (Exception e) {

e.printStackTrace();

}

}

// 保存新的word文件

try {

Dispatch.invoke(

(Dispatch) doc,

"SaveAs",

Dispatch.Method,

new Object[] { path, new Variant(1) },

new int[3]);

}catch (Exception e) {

e.printStackTrace();

}

try {

Variant f = new Variant(false);

Dispatch.call((Dispatch) doc, "Close", f);

}catch (Exception e) {

e.printStackTrace();

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException("errInfo:" + e);

} finally {

axc.invoke("Quit", new Variant[] {});

}

}

public static void main(String[] args) {

List<String> list = new ArrayList<String>() ;

// System.out.println(System.getProperty("java.library.path"));

list.add("D:\\odysee.docx");

list.add("D:\\odyseeWord.doc");

String destdoc = "D:\\More2OneWordUtil.docx";

convertedWord(list, destdoc);

System.out.println("More2OneWord转换成功");

}

}

标签: #java生成docx文档