ICE.ICE|

韩憨

园龄:4年7个月粉丝:42关注:47

JAVA 使用Jacob合并word文档

注意:这个只能在windos下使用,linux不支持

JACOB-JavaCOMBridge标准的操作word、excel工具包

下载jacob-1.18-x64.dll

64位windos对应的jacob-1.18-x64.dll到java目录的bin下面

 

 

 

class类中引入
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

如果有easypoi的Variant,先注掉,不然会报错。

 

引入合并方法

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();
//打开第一个文件
Dispatch 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 wordContent = Dispatch.get(doc, "Content").toDispatch(); // 取得word文件的内容
// Dispatch paragraphs = Dispatch.get(wordContent, "Paragraphs").toDispatch(); // 所有段落
// int paragraphCount = Dispatch.get(paragraphs, "Count").toInt(); // 一共的段落数
// Dispatch lastParagraph = Dispatch.call(paragraphs, "Item",new Variant(paragraphCount)).toDispatch(); // 最后一段
Dispatch.call(app.getProperty("Selection").toDispatch(), "HomeKey", new Variant(6));
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文件
System.out.println(savepaths);
//FileUtil.buildDir(savepaths);
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[]{});
}
}

 

测试方法

@RequestMapping(value = "/bicthh", method = RequestMethod.GET)
public void exportBicthh(HttpServletRequest request, HttpServletResponse response) throws Exception {
List<Map<String, Object>> list1 = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Map<String, Object> map = new HashMap<>();
map.put("name", "我是小明" + i);
list1.add(map);
}
List<Map<String, Object>> list2 = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Map<String, Object> map = new HashMap<>();
map.put("name", "我是小韩" + i);
list2.add(map);
}
//----------------------------------------------
try {
XWPFDocument doc1 = WordExportUtil
.exportWord07("C:\\Users\\Administrator\\Desktop\\测试模板表.docx", list1);
XWPFDocument doc2 = WordExportUtil
.exportWord07("C:\\Users\\Administrator\\Desktop\\测试模板表.docx", list2);
FileOutputStream fos1 = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\测试结果表1.docx");
FileOutputStream fos2 = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\测试结果表2.docx");
doc1.write(fos1);
doc2.write(fos2);
fos1.close();
fos2.close();
} catch (Exception e) {
e.printStackTrace();
}

List<String> list = new ArrayList<>();
list.add("C:\\Users\\Administrator\\Desktop\\测试结果表1.docx");
list.add("C:\\Users\\Administrator\\Desktop\\测试结果表2.docx");
uniteDoc(list, "C:\\Users\\Administrator\\Desktop\\测试结果表3.docx");
}

模板

 

 

结果1

 

 

结果2

 

 结果3 即合并的

 

本文作者:韩憨

本文链接:https://www.cnblogs.com/hanby/p/16044273.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   韩憨  阅读(664)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
//看板娘

西雅图

10°

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 隔离 (Studio Live Duet) 陈凯咏,林家谦
  2. 2 明知做戏 吴雨霏
  3. 3 残酷游戏 卫兰
  4. 4 你,好不好? 周兴哲
  5. 5 我可以 蔡旻佑
  6. 6 云烟成雨 房东的猫
  7. 7 说散就散 JC 陈咏桐
  8. 8 我配不上你 夏天Alex
  9. 9 不再联系 夏天Alex
  10. 10 等我先说 夏天Alex
  11. 11 我知道他爱你 夏天Alex
  12. 12 多想在平庸的生活拥抱你 隔壁老樊
  13. 13 这一生关于你的风景 隔壁老樊
  14. 14 我曾 隔壁老樊
  15. 15 关于孤独我想说的话 隔壁老樊
  16. 16 过客 周思涵
  17. 17 备爱 周思涵
  18. 18 嚣张 en
  19. 19 海口 后弦
我可以 - 蔡旻佑
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

寄 没有地址的信

这样的情绪 有种距离

你 放着谁的歌曲

你 放着谁的歌曲

是怎样的心情

能不能说给我听

雨 下得好安静

是不是你偷偷在哭泣

幸福 真的不容易

在你的背景 有我爱你~

我可以 陪你去看星星

不用再多说明

我就要和你在一起

我不想 又再一次和你分离

我多么想每一次的美丽

是因为你

寄 没有地址的信

寄 没有地址的信

这样的情绪 有种距离

你 放着谁的歌曲

是怎样的心情

能不能说给我听

雨 下得好安静

是不是你偷偷在哭泣

幸福 它真的不容易

在你的背景 有我爱你~

我可以 陪你去看星星

不用再多说明

我就要和你在一起

我不想 又再一次和你分离

我多么想每一次的美丽

是因为你

我可以 陪你去看星星

我可以 陪你去看星星

不用再多说明

我就要和你在一起

我不想 又再一次和你分离

我多么想每一次的美丽

是因为你

He...

He...