概述:
最近在生产开发实践出现了很多问题,经过了一系列排查,特做如下总结
探索成果:
1. jacob.dll的建议位置
- 首先jacob的官网,以及官方GitHub,你可以从这里找到DLL文件,以及相关资料
- 然后DLL文件建议放置的位置为:C:\Windows\System32;jdk\bin;jdk\jre\bin
- 或者可以直接使用主动加载的方式:
package com.example.worddemo.test.jacob;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.LibraryLoader;
import com.jacob.com.Variant;public class RangeText {public static void main(String[] args) {// 加载 JACOB 库System.setProperty(LibraryLoader.JACOB_DLL_PATH, "path/to/jacob-1.20-x64.dll");LibraryLoader.loadJacobLibrary();ActiveXComponent wordApp = null;try {// 创建 Word 应用程序对象wordApp = new ActiveXComponent("Word.Application");// 设置 Word 应用程序不可见wordApp.setProperty("Visible", new Variant(false));// 获取文档集合Dispatch documents = wordApp.getProperty("Documents").toDispatch();// 打开指定路径的文档String filePath = "C:\\path\\to\\your\\document.docx";Dispatch document = Dispatch.call(documents, "Open", filePath).toDispatch();// 关闭文档,不保存更改Dispatch.call(document, "Close", new Variant(false));} catch (Exception e) {e.printStackTrace();} finally {// 退出 Word 应用程序wordApp.invoke("Quit", new Variant[0]);}}
}
2. 以兼容模式运行/管理员身份运行
个人经过实践,这两种设置方式是没有用的,并不能解决、改善现有的调用错误问题。
当然网上有成功案例,但是我试了没用
3. COM组件DCOM的权限以及交互模式设置
个人实践没有用,如果想试的话可以参照下面的例子
- 例子1
- 例子2
- 例子3
- 例子4
- 例子5
4.安装VS的C++运行库
个人经过实践,没有用,根据官网给出的运行条件
安装了2019后依旧没有改善
解决办法:
在本项目中,遇到的问题,解决办法用到了以下两个文章提到的方案
- 这个文章中的显式加载,以及for循环改为while循环
- 这个文章中的触发事件