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
解决方法:将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完全控制。