Java中使用jacob操作Excel时出现的异常以及解决方法总结

2019-02-01 04:52 阅读 1,328 次 评论 0 条

jacob 就是 JAVA-COM Bridge的缩写,它是在java与微软的com组件之间的桥梁,通过使用jacob自带的dll动态链接库通过JNI的方式实现了在sun java平台上的程序对com调用。jacob的作者照搬了微软java开发包中调用com组件的模式,并将它在sun java平台上实现。

Java中使用jacob操作Excel时,需要进行一下几步操作:

1) 把jacob.jar加载到工程里;
2) 把jacob.dll放入 JAVA_HOME\bin\ 和 JAVA_HOME\jre\bin目录下;
3)  把jacob.dll放入 C:\WINDOWS\system32\,C:\Windows\SysWOW64下;

如果以上几个步骤没有操作或者操作错误的情况下,可能会出现一下异常或者错误:

1、未知异常:java.lang.UnsatisfiedLinkError: no jacob-1.18-x64 in java.library.path

解决方法:添加jacob.dll到C:\Windows\System32,C:\Windows\SysWOW64两个路径下,添加后可能会解决此异常。

2、未知异常:java.lang.NoClassDefFoundError: Could not initialize class com.jacob.com.ComThread
解决方法:添加jacob.dll在jdk根目录下,添加后可能会解决此异常。

3、java.lang.UnsatisfiedLinkError: Native Library C:\Windows\System32\jacob-1.18-x64.dll already loaded in another classloader

在JavaEE项目中使用Jacob的时候还会出现另外一个UnsatisfiedLinkError错误:jacob.dll already loaded in another classloader,错误往往会出现在Web容器重启之后。
这是因为在重启Web容器的时候并不会自动结束上一次对dll的加载,解决问题的关键在于重启Web程序之后要确保不要再次加载jacob.jar包,有一个方法就是不要将jacob.jar包放在web程序中,而是将jacob.jar包放在Web容积自身的lib目录下面就可以了。

解决方法:将web项目下.../WEB-INF/lib/下的jacob.jar剪切到tomcat下的lib文件夹,重启服务器后程序正常运行。

4、Microsoft Office Excel: 不能取得类 Workbooks 的 Open 属性

此外在导出Excel的时候还遇到过这个错误,这个错误与jacob无关,也可能只是在Windows Server 2008服务器上才会出现该错误。
解决方法:
Windows Server 2008 x64 :
在C:\Windows\SysWOW64\config\systemprofile\目录下新建“Desktop”目录,权限设置为everyone完全控制。

Windows Server 2008 x86:
在C:\Windows\System32\config\systemprofile\目录下新建“Desktop”目录,权限设置为everyone完全控制。

 

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:Java中使用jacob操作Excel时出现的异常以及解决方法总结 | 雨晨博客
分类:JAVA, 程序笔记 标签:, ,

发表评论


表情