由于这几天的客户需求使用到了java关于jacob操作word的问题,下面对这几天遇到的问题进行一下总结:
本机第一次使用jacob的时候,本机装的WPS接下来一路畅通,直到最后完成word的导出功能,部署正式环境后出现问题了,问题如下:
1、常见问题为jacob.jar 和 jacob.dll两个文件不匹配造成的,建议到官网现在最新的匹配包,或者下载我上传的资源,地址为:http://download.csdn.net/download/a_java_stu/10154851,不要怪我要的分数高,无奈我这边最小只能选5分,都是开发的 可以理解分数的重要性,我已经选的是最低的啦,现在没有0积分下载了 不知道为什么。
2、报Can’t load IA 32-bit .dll on a AMD 64-bit platform 这个错误是因为dll文件对32位和64位没有放对位置,如果不确定32位还是64位,我建议(个人使用中发现的)32位和64位在相应的位置都放。
3、下面对dll文件放的位置进行一下说明
根据我的项目说:
1)win7和win10
在jdk/jre/bin中放两份dll(32位和64位),jdk\jre\lib\ext中放对应的jar包。其他地方我什么都没有放程序运行正常。
2)win server 2008
在jdk/bin放两份,jre/bin放32位,jdk/jre/bin中放32位,tomcat中放32位,sys32/sys64都是双份,测试程序一切正常。
3)
tomcat/lib中建议放jacob.jar。
4、我的程序在初始化word的时候抛出异常
ComThread.InitSTA();
if (this.word == null) {
/* 初始化应用所要用到的对象实例 */
try{
this.word = new ActiveXComponent("Word.Application"); //测试是否可以正常初始化word
}catch(Exception e){
e.printStackTrace();
}
/* 设置Word文档是否可见,true-可见false-不可见 */
this.word.setProperty("Visible", new Variant(false));
/* 禁用宏 */
this.word.setProperty("AutomationSecurity", new Variant(3));
就是在我标红的这个地方,前提是dll文件已经放对了位置和排除版本不一致的情况,在网上各种搜索未能解决,突然一个
想法是,是否和加载的office版本有关系,所以卸载了office2010 特意下载了一个0ffice2010 64位的装上,再次测试,程序正常执行。
不知道是否和这个有关系(等待具体的验证),但是切换office版本之后的确都可以了!
5、可以到控制面板--组件服务--计算机--我的电脑--DCOM配置下面寻找”Microsoft WORD97-2003”
(这拿word做例子,其他的也相似)的节点右键单击该节点,选属性 ,切换到标识选项卡,改为“交互式用户”,
最后点击确定完成。
6、个人心得:如果该放的地方、该测试的代码都测试了就是不行,建议clean一下项目,不要完全依赖IDE。