网站首页 > java教程 正文
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项目官方地址:
https://sourceforge.net/projects/jacob-project/
(2)Jacob下载地址:
https://sourceforge.net/projects/jacob-project/files/
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转换成功");
}
}
猜你喜欢
- 2024-11-05 POI操作word模板并生成新的word(poi生成word文档)
- 2024-11-05 人工智能文档编写器:使用AI生成Javadocs等文档的插件扩展
- 2024-11-05 Java 操作 Office:POI之word图片处理
- 2024-11-05 在JSP页面中直接以WORD格式或者将页面下载成WORD格式文件
- 2024-11-05 springboot-如何集成screw生成数据库文档
- 2024-11-05 借助Spire.Doc控件,在Java中将 Word 转换为图像
- 2024-11-05 SpringBoot + Screw 一键生成数据库文档
- 2024-11-05 Spire.PDF for Java 8.7.0 增强了 PDF 到 Word 和 Excel 的转换
- 2024-11-05 如此简单!Aspose.Words助力以Java编程方式创建丰富的Word文档
- 2024-11-05 GitHub精选 | 告别手写,一键生成数据库表文档
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)