Jacob实现Java操作Office

版权声明:所有原创,转载请在开头注明出处 https://blog.csdn.net/SELECT_BIN/article/details/82385215

首先,官网下载资源:https://sourceforge.net/projects/jacob-project/

导包:

1.如果没用maven管理工程,就随便导吧;

2.如果时使用的Maven管理工程;

用命令行导入maven:

mvn install:install-file -Dfile=D:\works\jacob.jar -DgroupId=org.jacob -DartifactId=jacob -Dversion=1.19 -Dpackaging=jar

其中你下载下来的jar包要放在D:\works目录下,版本和jar包名称注意对应;

在pom文件里面加依赖:

<dependency>
    <groupId>org.jacob</groupId>
    <artifactId>jacob</artifactId>
    <version>1.19</version>
</dependency>

然后开始写应用,其中Words和Excel之类的比较好操作,这里不再赘述,直接讲最难的,也就是OutLook的自动化操作;

出错总结

异常解决:

1.java.lang.UnsatisfiedLinkError: no jacobin java.library.path

原因是:没有把 jacobxxxx x64.dll 两个文件拷贝到 jdk\bin或者C:\WINDOWS\system32目录下

2.Exception in thread "main" com.jacob.com.ComFailException: Can't get object clsid from progid

 原因是:regsvr32  ***.ocx命令进行注册后 ,获取的progid有误;

3.

Exception in thread "main"com.jacob.com.ComFailException: A COM exception has beenencountered:

At Invoke of: LoadFile

Description:灾难性故障

    at com.jacob.com.Dispatch.invokev(Native Method)

    at com.jacob.com.Dispatch.invokev(Dispatch.java:858)

    at com.jacob.com.Dispatch.callN(Dispatch.java:455)

    at com.jacob.com.Dispatch.call(Dispatch.java:544)

    at com.lv.office.AIPToTest.jacob(AIPToTest.java:24)

    at com.lv.office.AIPToTest.main(AIPToTest.java:14)

原因是:

在OCX控件中,重写COleControl.IsInvokeAllowed (DISPID)方法,即在控件的CMyNameCtrl中增加一个方法

BOOL CMyNameCtrl::IsInvokeAllowed (DISPID)

   {

      return TRUE;

   }

用这个方法的理由是:

这个错误是由ActiveX结构设计造成的。

在Ole4.0版本之前,外部程序是可以直接调用OCX中方法的。Ole4.0之后,每次调用控件中的方法,系统会自动检查是否允许调用,即运行COleControl.IsInvokeAllowed (DISPID)

该方法检查控件是否正确的初始化或者是否通过持久存储接口正确加载,如果两个条件有一个满足,即返回TRUE,否则返回FALSE。

当控件在MFC中使用时,很多细节,如初始化,都被过滤了,这样,大多数用户都不会遇到这个问题。但是,当我们从C、C++的dll中调用控件时,不满足上述条件,该方法返回FALSE,这时候再调用任何控件方法,都会出现上述异常。

-------------------还有就是

At Invoke of: LoadFile(LoadFile可能是其他内容)

Description:灾难性故障(灾难性故障可能是乱码)

-----------------是你的jdk版本和jacob版本不一致的原因(个人看法)-

猜你喜欢

转载自blog.csdn.net/SELECT_BIN/article/details/82385215