概述:
最近在生产开发实践出现了很多问题,经过了一系列排查,特做如下总结
探索成果:
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循环
- 这个文章中的触发事件