前言:
眼前兄弟们对“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文档