随笔 - 303  文章 - 883  trackbacks - 0
2007年3月
25262728
78
131415
2023
2930
1234567

欢迎光临! 
闲聊 qq:1074961813

[原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 -凯发k8网页登录

  • struts hibernate spring等学习 基础不扎实 可以跳到j2se学习群 37486623 请先退出该群
  • j2se学习 若人满请加到12999758 学完的可以跳到j2ee学习群 37486483 请先退出该群
  • java & .net都是热门的web技术 当然可以一起学啦 欢迎前来探讨技术 解决问题
  • 该群在发展中,踢人是经常的事情
  • 学完的可以跳到j2ee学习群 37486483 请先退出该群
  • 学无止境 好好努力! 讨论 web 技术 、 java (j2se j2ee) 、c/s编程 、 数据库 。。。。
  • 将 linux 和 c、c 编程进行到底!
  • 《think in java》 我们的最爱
  • 历史、宗教、哲学、气功、传统技艺,欢迎加入,知无不言,言无不尽!
  • 07年文祠实习群
  • arm || intel ...platform windows || linux device driver development 有一定基础方可加入
  • n维空间
  • email : java3d@126.com 群 : 12999758
  • java、vc和嵌入开发
  • c/c /windows/mfc
  • 三驾马车
  • 仙人指路
  • 弄vc和汇编的家伙
  • 同学的blog
  • 北京的朋友,和我一起创建了不少群 呵呵!
  • vc
  • 一个和我差不多大的北京女孩
  • 累了的时候啦 可以寻下开心

搜索

  •  

最新评论

大家好啊! 我是寻觅       

 最近天气变化多,大家要多注意身体啊~~~
 
好了进如正题,最近在帮个朋友做java调用office的东东,花了些时间,终于搞定了
由于问题多多,现在把过程和大家分享:

首先,大家先要了解一下jacob ,官方的解释是java com bridge,即java和
com组件间的桥梁(进一步了解com/dcom: )
com一般表现为dll或exe等二进制文件,像我们呆会会用到的jacob.dll文件
这里说说为什么我们用java去操纵office(如:word)要使用com,而不直接
使用java去做?
首先,我们清楚office是建立在windows平台之上的,本身是一个软件,除了
他自己提供的宏似乎没有什么能对他进行直接的操作;在windows平台上为了
解决像这样的不同应用软件,通信缺乏通用api问题,推出了com的凯发天生赢家一触即发官网的解决方案;
我们使用dll中的一组或多组相关的函数存取组件数据,总的合称为接口
具体到每个细节的实现称为方法;如果我们要调用接口里的方法,唯一的途径就是
调用指向接口的指针;
   所以总的来说使用就是dll完成api的转换;
如果你听不懂,则称为废话(不懂没关系,会用就好,用久自然懂了);
开玩笑,呵呵
好了com讲完,我们开始我们的主要内容吧!

大家先下载这里  

里面的jacob.jar是我们要用的包
           
jacob.dll就是我前面说的com组件
把包里的jacob.dll放到c:/windows/system32下
讲解麻烦,画个图大家看 好

jacob.png

值得注意的是,不同的版本的系统使用不同的dll文件
所以如果你编译成功,但运行失败一般是dll文件问题
遇到这种情况,可以到

下载其他的版本的 dll 文件。
先给大家个word的测试代码(经过更改该代码在我的机器上运行正常)
以后有会找时间,推出其他的office代码


 
import  com.jacob.activex.activexcomponent;
import  com.jacob.com.comexception;
import  com.jacob.com.dispatch;
import  com.jacob.com.variant;

public   class  worddocumentproperties  {
    
// 声明一个word对象
     private  activexcomponent objword;

    
// 声明四个word组件
     private  dispatch custdocprops;

    
private  dispatch builtindocprops;

  

    
private  dispatch document;

    
private  dispatch wordobject;

   
    
public  worddocumentproperties() {
    }


    
/**
     * 打开word文挡
     
*/

    
public   void  open(string filename)  {
        
// 创建一个word对象
        objword  =   new  activexcomponent( " word.application " );

        
// 为wordobject组件附值
       wordobject  =  (dispatch)(objword.getobject());            // 改了这里

        
// 生成一个只读方式的word文挡组件
        dispatch.put(wordobject,  " visible " new  variant( false ));

        
// 获取文挡属性
        dispatch documents  =  objword.getproperty( " documents " ).todispatch();

        
// 打开激活文挡
        document  =  dispatch.call(documents,  " open " , filename).todispatch();
    }


   
    
public   void  selectcustomdocumentproperitiesmode()  {
        
        custdocprops 
=  dispatch.get(document,  " customdocumentproperties " )
                .todispatch();
    }


   
    
public   void  selectbuiltinpropertiesmode()  {
        
        builtindocprops 
=  dispatch.get(document,  " builtindocumentproperties " )
                .todispatch();
    }


    
/**
     * 关闭文挡  
     
*/

    
public   void  close()  {
        
        dispatch.call(document, 
" close " );
    }


   
    
public  string getcustomproperty(string cuspropname)  {
        
try   {
            cuspropname 
=  dispatch.call((dispatch) custdocprops,  " item " ,
                    cuspropname).tostring();
        }
  catch  (comexception e)  {
          
            cuspropname 
=   null ;
        }


        
return  cuspropname;
    }


    
public  string getbuiltinproperty(string builtinpropname)  {
        
try   {
            builtinpropname 
=  dispatch.call((dispatch) builtindocprops,  " item " ,
                    builtinpropname).tostring();
        }
  catch  (comexception e)  {
           
            builtinpropname 
=   null ;
        }


        
return  builtinpropname;
    }


  
    
public   static   void  main(string[] args)  {
        
try   {
        
            worddocumentproperties jactest 
=   new  worddocumentproperties();

          
            jactest.open(
" s.doc " );

            
            jactest.selectcustomdocumentproperitiesmode();

            
            jactest.selectbuiltinpropertiesmode();

            
            string custvalue 
=  jactest.getcustomproperty( " information source " );

            
            string builtinvalue 
=  jactest.getbuiltinproperty( " author " );

             
            jactest.close();

            
            system.out.println(
" document val one:  "    custvalue);
            system.out.println(
" document author:  "    builtinvalue);

        }
  catch  (exception e)  {
           system.out.println(e);
       }

    }

}


 



地震让大伙知道:居安思危,才是生存之道。
posted on 2007-03-27 19:06 小寻 阅读(53675) 评论(90)  编辑  收藏 所属分类: j2se/j2ee/j2mec/c /c#/pasic/vb/php/asp(.net)/win-cgi/xml...

feedback:
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2007-04-02 22:27 
牛呀,这个倒没接触过,有需要的时候再来借鉴。  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2007-08-21 08:01 
你好:
看了你的文章后,感觉挺好的,希望你能把在此过程中所遇到的问题也一起写出来,供大家参考,我最近就遇到了jacob.dll文件重复加载和资源文件的路径不对的问题,但是还没有找到原因,希望你能帮我解答一下。谢谢  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2007-08-22 00:05 幻想~@@~
呵呵,对不起!
这个问题很早之前的了,这些信息当时我也没保留下来
可以留下你的报错信息,
我给你解下吧!


 

  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2007-08-31 16:48 
我运行程序报错啊,错误是
exception in thread "main" java.lang.unsatisfiedlinkerror: c:\program files\java\jdk1.5.0_04\jre\bin\jacob.dll: ??????ó??ò???ò????????ó??òδ???????????°????ó??ò????~??????????
at java.lang.classloader$nativelibrary.load(native method)
at java.lang.classloader.loadlibrary0(classloader.java:1751)
at java.lang.classloader.loadlibrary(classloader.java:1668)
at java.lang.runtime.loadlibrary0(runtime.java:822)
at java.lang.system.loadlibrary(system.java:992)
at com.jacob.com.libraryloader.loadjacoblibrary(libraryloader.java:57)
at com.jacob.com.jacobobject.(jacobobject.java:150)
at xhk.jacob.test.worddocumentproperties.open(worddocumentproperties.java:33)
at xhk.jacob.test.worddocumentproperties.main(worddocumentproperties.java:109)
能帮我看看这是什么错啊   回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2007-08-31 16:54 
我的 jdk是 1.5的,jacob是1.13的  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2007-09-04 01:26 幻想~@@~
exception in thread "main" java.lang.unsatisfiedlinkerror: c:\program files\java\jdk1.5.0_04\jre\bin\jacob.dll
你把你的dll放到bin下但是程序报了错,说你的dll不合适
(当然你可以把他放到c:\windows\system32下,该目录放置了
 大部分系统的dll,且默认被设置在系统变量里,放进去就可以直接使用)

原因是 jacob.dll  需要通过jni和你的程序交互,但是你的dll并不适合
所以,你大可以找其他版本的jaco.jar和jacob.dll进行配对相信总有
一个可以的;

如果还是不成功,你也可以写一个jni程序,具体介绍
我这里有点文章;你可以找找看。
简单的说,jni 就是java native interface 负责java和系统函数打交道,具体就是提供java到c的数据类型的转换。又一个jni.h文件负责,
具体位置 jdk\include\jni.h

除了我blog上的文章之外,你可以到网上找找“传智博客”提供的三集jni视频
谢谢你的支持!祝你成功
  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2007-09-10 18:17 
这不就是本身的例子吗 还说是你做的 呵呵 真行  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2007-09-11 10:20 幻想~@@~
难道你一开始写的代码不是照例子写的吗?牛人~~
眼睛 => "// 改了这里"   回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2007-11-28 09:37 
楼主用的是什么版本的jacob、jdk、word,我试的都不行
我的jdk1.6、word2003能用jacob吗  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2007-11-28 20:50 
可以的
你可以用
jacob_1.9_src.zip\jacob_1.9\samples\
下代码进行的测试
只要环境配置(classpath)正确,一般是不成问题。
如果出问题,那可能是系统问题了!  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-01-11 11:30 
请问一下,有人知道jacob可以在linux下使用么
  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-01-14 21:32 

jacob只适用于windows平台,  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-01-15 00:35 幻想~@@~
首先,linux下没有microsoft offices 但是有open offices
其次,jacob使用的dll ,linux下没 dll
最后,如果能力上没问题 可以自己开发一套java控制open office的**.o或**.so
当然如果你能想到更简单的方法或找到其他的开源包那是最好啦  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-01-15 00:42 幻想~@@~
jooconverter是一个开源java/openoffice文档转换器

也许这个正是你需要的  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-04-01 15:19 
com.jacob.com.comfailexception:can't get object clsid from progid出现一个这样的错误!  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-04-11 15:41 
@lf
咱俩错误一样
  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-04-17 10:13 
楼主好:)
我是java菜鸟,问下你com.jacob.com.comfailexception: can't get object clsid from progid

这个错误是怎么回事

--------------------------------------------------
谢谢!  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-04-23 13:57 
@郁林
use regsvr32 to register the dll..  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-04-23 15:42 
com.jacob.com.comfailexception: can't get object clsid from progid
这个问题我也出了,不过已经解决。

原因是,从网页上拷贝下来的代码,引号里的字符串两端多出了俩空格,删掉就可以了。否则的话它找不到相应的com id,也就是那个application   回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-04-23 15:44 
如果按照楼主说的把dll放在system32下的话,是不需要注册它的,不需要这一句use regsvr32 to register the dll..   回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-05-03 19:47 
我运行报错
com.jacob.com.comfailexception: invoke of: open
source: microsoft word
description:   回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-05-16 15:25 
com.jacob.com.comfailexception: can't map name to dispid: visible   回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-05-17 21:21 
可能是版本不匹配造成的,试试更换jdk、jacob版本  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-07-27 16:39 
不错,不错。支持一下。  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-07-30 17:21 
这几天我也在做这个,功能是实现了,在调用模板路径的时候路径是固定情况就可以,如果模板路径不是固定的,而是用方法得到,就会报这个错:
jacob.com.comfailexception: invoke of: open
  回复  
  
# re: jacobʹ�����ż�������� ~~~~~~~~~~~ ������ 2008-08-13 17:53 
can't get object clsid from progid����ҳ��������������ڵ�������⣬�ҵıʼdz����ǻõģ�װ��xpϵͳ����װ���������ͼͳ����ã�����ϵͳ��2003��������jdk�ȶ���һ���ģ���֪�dz��ǹ�����ϵͳ�йأ��һ���һ��dll��jar�ļ�ҳ���dz��у�
  回复  
  
# re: jacobʹ�����ż�������� ~~~~~~~~~~~ ������ 2008-08-13 17:57 
can't get object clsid from progid,我的也出现了这个报错,我在笔记本上是好的,但移动服务器上就不行了,唯一的区别就是一个装的xp,另一个是2003,其它的什么jdk,tomcat等都是一样的,我换了一个dll和相应的jar都不行,是不是还与操作系统有关,或是2003下面不能用  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-08-18 09:26 
@eydp@163.com

我也遇到同样问题,xp下正常使用,2003就不能用了,急救。。。。有没有谁知道原因?  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-08-18 11:30 
2003系统下如果报错
exception in thread "main" java.lang.unsatisfiedlinkerror: c:\windows\system32\jacob-1.14-x86.dll: 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
请安装microsoft visual c 2005 sp1 redistributable package (x86)吧,
地址如下



  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-08-22 16:27 
楼主,有没有什么jacob的学习资料(除了它自带的那些)  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-11-01 09:38 
朋友您好 我最近在用这个的时候很不稳定 连续处理10个文件总是有两三个中途出异常,都是些不可处理的异常 例如can't map name to dispid: text
can't map name to dispid: forward can't map name to dispid: find 特别是当出现can't map name to dispid: close 和can't map name to dispid: quit 的话文件就没办法关闭了 winword.exe进程会越来越多,最终耗尽内存 我想问一下您是否遇见过此类问题 这是程序本身不健壮还是我用的版本和jdk不兼容造成的  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-11-04 13:03 小寻

大家在做测试的时候,一定要按照步骤,一步一步完成,不能少了哪一步,比如不能少了打印机的设置。

  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-14 17:32 
您好,最近我用了jacob,遇见了把服务器当掉的问题。报的异常您看一下。能帮一下我吗? 非常感谢!!!
an unexpected exception has been detected in native code outside the vm.
unexpected signal : exception_access_violation (0xc0000005) occurred at pc=0x3b8c4ad
function=java_com_jacob_com_dispatchproxy_release 0x267d
library=d:\appserver\tomcat6jdk6-8008\j2sdk1.4.2_06\bin\jacob.dll

current java thread:
at com.jacob.com.variant.init(native method)
at com.jacob.com.variant.(variant.java:216)
at com.jacob.com.dispatch.invokev(native method)
at com.jacob.com.dispatch.invokev(dispatch.java:384)
at com.jacob.com.dispatch.get(dispatch.java:512)
at com.heavenlake.wordapi.document.getbookmark(document.java:86)
at com.heavenlake.wordapi.document.insertatbookmark(document.java:178)
at com.heavenlake.wordapi.document.insertatbookmark(document.java:194)
at com.jcst.word.buildwordbyconfigsubclass.buildwordbyxml(buildwordbyconfigsubclass.java:183)
at org.apache.jsp._1_jsp._jspservice(_1_jsp.java:70)
at org.apache.jasper.runtime.httpjspbase.service(httpjspbase.java:133)
at javax.servlet.http.httpservlet.service(httpservlet.java:856)
at org.apache.jasper.servlet.jspservletwrapper.service(jspservletwrapper.java:311)
at org.apache.jasper.servlet.jspservlet.servicejspfile(jspservlet.java:301)
at org.apache.jasper.servlet.jspservlet.service(jspservlet.java:248)
at javax.servlet.http.httpservlet.service(httpservlet.java:856)
at org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:284)
at org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:204)
at org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:257)
at org.apache.catalina.core.standardvalvecontext.invokenext(standardvalvecontext.java:151)
at org.apache.catalina.core.standardpipeline.invoke(standardpipeline.java:567)
at org.apache.catalina.core.standardcontextvalve.invokeinternal(standardcontextvalve.java:245)
at org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:199)
at org.apache.catalina.core.standardvalvecontext.invokenext(standardvalvecontext.java:151)
at org.apache.catalina.core.standardpipeline.invoke(standardpipeline.java:567)
at org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:184)
at org.apache.catalina.core.standardvalvecontext.invokenext(standardvalvecontext.java:151)
at org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:164)
at org.apache.catalina.core.standardvalvecontext.invokenext(standardvalvecontext.java:149)
at org.apache.catalina.core.standardpipeline.invoke(standardpipeline.java:567)
at org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:156)
at org.apache.catalina.core.standardvalvecontext.invokenext(standardvalvecontext.java:151)
at org.apache.catalina.core.standardpipeline.invoke(standardpipeline.java:567)
at org.apache.catalina.core.containerbase.invoke(containerbase.java:972)
at org.apache.coyote.tomcat5.coyoteadapter.service(coyoteadapter.java:206)
at org.apache.coyote.http11.http11processor.process(http11processor.java:833)
at org.apache.coyote.http11.http11protocol$http11connectionhandler.processconnection(http11protocol.java:732)
at org.apache.tomcat.util.net.tcpworkerthread.runit(pooltcpendpoint.java:619)
at org.apache.tomcat.util.threads.threadpool$controlrunnable.run(threadpool.java:688)
at java.lang.thread.run(thread.java:534)

dynamic libraries:
0x00400000 - 0x0040b000 d:\appserver\tomcat6jdk6-8008\j2sdk1.4.2_06\bin\java.exe
0x7c930000 - 0x7ca00000 c:\windows\system32\ntdll.dll
。。。。。。。。。。。。。。
local time = wed nov 12 09:42:12 2008
elapsed time = 1738
#
# the exception above was detected in native code outside the vm
#
# java vm: java hotspot(tm) client vm (1.4.2_06-b03 mixed mode)
#


  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-14 21:28 
请说清楚你用的什么服务器,环境如何(os? jdk? jvm? webserver?)  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-15 11:52 
web服务器是tomcat5.0,jdk是1.4的.系统是win2003.
很郁闷的问题.这种情况一般是一天出现一次,服务器就趴掉了.
网上找了好久,也没找到解决办法。  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-15 11:57 
开始在一台双核,4g内存的服务机上,打开word需要30 秒,一天服务器要趴好几次,都是报的这个异常.
实在没办法,转移到另一台机器上,动态出word是正常了,大概4~5秒的时间,不过还是会报这个异常,就是一天基本一次了。
实在郁闷...
  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-16 00:43 
根据您提供的各种信息(异常和环境),我个人认为问题应该出在软件环境上,您可以检查一下jvm、jacob、nt版本是否匹配?希望我的分析对您解决该问题能起到参考作用。  回复  
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-16 10:23 
恩,我也估计是jacob的版本问题.我估计是jacob.jar与jacob.dll两个不匹配的问题。   回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-11-24 23:03 银河使者
jacob还没用过,没使用过java调用com,一般调用com就使用delphi、c#或c 了。有空研究一下jacob。不过个人认为,com是windows特有的,如果想调用com,可以使用windows下的语言或工具,如delphi,c#都是很好的选择。最喜欢delphi,不会出现这样那样的兼容问题。当然,用vb6也很好。调用com并不是java的长项。如果非要使用java,那就只好用象jacob一样的库了。
不过还是支持楼主的文章!!!  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-11-24 23:03 银河使者
估计jacob也是用jni做个dll,调的。  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-11-24 23:06 银河使者
@郁林
com组件需要一个id来引用,这个错误是com组件的id错了,或根本没有这个组件。  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-11-24 23:08 银河使者
@幻想~@@~
openoffice有自己的jdk,可以研究一下,不错,很好很强大。  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-11-24 23:12 银河使者
个人感觉如果只是创建com组件,并调用其中的方法或属性并不十分复杂,可以使用jni技术用c 或delphi实现一个(返正做这个dll很简单,以前用delphi做过很多这种东西),并在java中提供接口。 不知道jacob有没有其他的功能?  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-27 21:59 小寻
@银河使者
jacob 确实是使用jni 来实现的
http://www.blogjava.net/lusm/archive/2008/11/22/jacob.html  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-02-06 15:50 
你好,我在使用jacob中也出现了服务器down的现象,主要是如果是一个人来报数据的时候,jacob解析word是正常的,可是如果为多个人同是上报word数据时,服务器就down了。我的qq是155192670,如果方便的话,请把我加入来指导我吧!在一次感谢!

  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2009-02-07 10:41 
@大起大落
您好!据上所说,小弟做了如下分析:
当多个用户访问(读取,写入)同个文件(或数据库)的时候,我们称之为并发访问(操作)。再这种情况下,若没有相应的措施,就必然产生冲突(这在种操作系统里也经常看到),一般的web服务器(tomcat 等),都有对这种情况做了处理,通过各种措施,保证多用户可以正常进行。
我的建议是:如果你没有使用相应的服务器,你可以做如下处理:当多个用户对office文件做合法的写(保存)操作时,可以对除第一个(或高优先级的)用户做锁定,等第一用户操作完成之后,再将资源分配给下一个用户。
当然在软件实现的同时,还要考虑系统问题,比如系统设置该文件是否能为多个web用户访问。
简短的回答,希望能对您有所帮助。欢迎qq联系交流^_^。  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-02-09 14:40 
谢谢小寻的回复,你提出的解决方法是正确的。是因为并发问题导致了服务器的down机。关于对用户加锁的方式我也试过,没有发生错误。但是这样做就不能满足用户的需求了。现在把jacob更新到1.14版本后,就没有并发的问题了,但是又出现的winword.exe不能正确关闭的问题。我现在不知道您的qq号是多少,我的是155192670,如果方便,请加入我,咱们qq上交流。谢谢  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-02-09 16:13 
寻觅,您好,我在使用jacob中关闭winword.exe进程时,老是出现normal.dot提示,不知道您是否遇到此问题?我现在不知道该怎么解决,十在是郁闷啊!  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-02-10 10:49 
问题解决了,好苦啊!终于解决了,谢谢大家的帮助!  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-02-26 10:09 
11:34:30,375 error [stderr] java.lang.unsatisfiedlinkerror: native library c:\program files\java\jdk1.5.0_08\jre\bin\jacob.dll already loaded in another classloader

谢谢楼主了。jboss-4.0.4.ga-3.4 winxp sp2(or win2003) jvm1.5.0_08  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-02-28 00:11 
我冲你上面
下的1.9 怎么没有jar包啊  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-03-03 12:11 
exception in thread "main" com.jacob.com.comfailexception: invoke of: open
source: microsoft word
description: 您正试图运行的函数包含有宏或需要宏语言支持的内容。而在安装此软件时,您(或您的管理员)选择了不安装宏或控件的支持功能。

at com.jacob.com.dispatch.invokev(native method)
at com.jacob.com.dispatch.invokev(dispatch.java:858)
at com.jacob.com.dispatch.invoke(dispatch.java:502)
at gui.wordoperbean.opendocument(wordoperbean.java:39)
at gui.wordoperbean.main(wordoperbean.java:155)

求教下这样的问题怎么解决呢,java菜鸟,恳请帮助!  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-03-03 15:54 
上面的问题解决了,word文档的设置有问题,现在想请教怎么创建一个word文档啊
exception in thread "main" com.jacob.com.comfailexception: invoke of: open
source: microsoft word
description: 找不到此文件。
请试用下列方法:
* 检查文档名的拼写。
* 试用另一文件名。
(c:/newword.doc)  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2009-03-18 10:18 
exception in thread "main" java.lang.unsatisfiedlinkerror: no jacob-version not set in compilation_tools properties file-x86 in java.library.path
at java.lang.classloader.loadlibrary(unknown source)
at java.lang.runtime.loadlibrary0(unknown source)
at java.lang.system.loadlibrary(unknown source)
at com.jacob.com.libraryloader.loadjacoblibrary(libraryloader.java:184)
at com.jacob.com.jacobobject.(jacobobject.java:108)
at testyh.d2p.(d2p.java:14)
at testyh.d2p.main(d2p.java:108)

word zhuad pdf bao de cuo wu 如何解决、  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-04-28 16:21 
谢谢分享,这两天正好在研究这东东@幻想~@@~
  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2009-05-12 17:47 
请问:怎么解决的  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-06-08 10:38 
exception in thread "main" java.lang.unsatisfiedlinkerror: com.jacob.com.variant.getvarianttype()s

麻烦大家帮我看看这个是怎么回事儿  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-08-04 15:29 


操作错误,请参考原因或联系系统管理员




--------------------------------------------------------------------------------
class class com.jacob.com.comfailexception
message can't map name to dispid: quit

0 com.jacob.com.dispatch.invokev(native method)
1 com.jacob.com.dispatch.invokev(dispatch.java:858)
2 com.jacob.com.dispatch.calln(dispatch.java:455)
3 com.jacob.com.dispatch.call(dispatch.java:533)
4 it.bigatti.word8._application.quit(_application.java:514)
5 com.jmst.ysgzz.web.struts.action.b.wordbase.destroy(wordbase.java:129)
6 com.jmst.ysgzz.web.struts.action.b.b41.sreachbl.savedocument(sreachbl.java:139)
7 com.jmst.ysgzz.web.struts.action.b.b01.infoview.execute(infoview.java:21)
8 org.apache.struts.chain.commands.servlet.executeaction.execute(executeaction.java:58)
9 org.apache.struts.chain.commands.abstractexecuteaction.execute(abstractexecuteaction.java:67)
10 org.apache.struts.chain.commands.actioncommandbase.execute(actioncommandbase.java:51)
11 org.apache.commons.chain.impl.chainbase.execute(chainbase.java:190)
12 org.apache.commons.chain.generic.lookupcommand.execute(lookupcommand.java:304)
13 org.apache.commons.chain.impl.chainbase.execute(chainbase.java:190)
14 org.apache.struts.chain.composablerequestprocessor.process(composablerequestprocessor.java:283)
15 org.apache.struts.action.actionservlet.process(actionservlet.java:1913)
16 org.apache.struts.action.actionservlet.dopost(actionservlet.java:462)
17 javax.servlet.http.httpservlet.service(httpservlet.java:710)
18 javax.servlet.http.httpservlet.service(httpservlet.java:803)
19 org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:290)
20 org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)
21 com.jmst.servlet.filter.requestdumpfilter.dofilter(requestdumpfilter.java:100)
22 org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:235)
23 org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)
24 com.jmst.servlet.filter.setcharacterencodingfilter.dofilter(setcharacterencodingfilter.java:102)
25 org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:235)
26 org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)
27 org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:228)
28 org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:175)
29 org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:128)
30 org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:104)
31 org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:109)
32 org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:216)
33 org.apache.coyote.http11.http11processor.process(http11processor.java:844)
34 org.apache.coyote.http11.http11protocol$http11connectionhandler.process(http11protocol.java:634)
35 org.apache.tomcat.util.net.jioendpoint$worker.run(jioendpoint.java:445)
36 java.lang.thread.run(thread.java:619)

  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2009-09-04 10:49 
请问如果该word文档不存在,出现调用异常的时候,想创建一个word文档,怎么做啊。  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-09-24 16:25 
www.1ok5ok.com免费网络赚钱大集合!新手学习天地!  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2009-12-11 09:07 
我出现了
exception in thread "main" com.jacob.com.comfailexception: can't get object clsid from progid
at com.jacob.com.dispatch.createinstancenative(native method)
at com.jacob.com.dispatch.(dispatch.java:101)
at com.jacob.activex.activexcomponent.(activexcomponent.java:58)
at dispatch_msword.doctopdf(dispatch_msword.java:148)
at dispatch_msword.main(dispatch_msword.java:214)
这个错误 仔细看了您的回帖 还是没找到解决办法
麻烦您帮我看看怎么回事
我是jacob-1.15-m2,jdk1.6的  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2010-04-10 22:20 
hen hao wo xiang shi yong  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2010-04-10 22:22 
xie xie   回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2010-04-24 16:15 
有没.net 版的啊!
  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2010-06-21 16:45 
@zlc
我的是在xp下运行没有任何问题,但是在server 2003下就can't get object clsid from progid了,楼主有啥好的解决办法吗  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2010-09-09 17:26 
exception in thread "main" com.jacob.com.comfailexception: invoke of: open
source: microsoft word
description:
我也出现了这个问题..怎么回事啊。。我用的都是jaboc是1.9的,jdk是1.6的 tomcat是6.0的 能具体说说么  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2010-11-25 14:48 
这个页面很多地方需要去空格,比如: objword = new activexcomponent( " word.application " );中的" word.application "   回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2010-12-04 11:32 
改了这里
jactest.open("e:\\other\\00.doc");

控制台输出:
document val one: null
document author: ccor02

什么情况?  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2011-04-06 16:09 
@呆子甲
我改了不行啊  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2011-04-07 15:57 
@啊啊
我也是这种情况,我用的是最新的版本,15  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2011-04-11 21:02 
org.apache.jasper.jasperexception: unable to compile class for jsp:

an error occurred at line: 236 in the jsp file: /wool2/xiudoc_j.jsp
activexcomponent cannot be resolved to a type
233: {
234:
235:
236: activexcomponent app = new activexcomponent("word.application");
237:
238: string docpath = rootpath list.get(i);
239: string htmlpath = rootpath list.get(i).substring(0, (list.get(i).length() - 4));



请问这个问题该怎么解决??谢谢我是大菜鸟

  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2011-04-25 21:10 
@金灯剑
你好,我现在就是遇到了这个问题:java.lang.unsatisfiedlinkerror: native library c:\program files\java\jdk1.5.0_08\jre\bin\jacob.dll already loaded in another classloader
请问你的问题是怎么解决的呀?能加我qq(867298622)详聊吗?谢谢  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2011-05-20 17:37 
你好!这个贴好高!
我想请问一下我这里的问题。
jdk1.5 jacob1.7 当执行到
workbooks = xl.getproperty("workbooks").todispatch();
这一句时,会报如下错误信息
#
# an unexpected error has been detected by java runtime environment:
#
# exception_access_violation (0xc0000005) at pc=0x77c25385, pid=7120, tid=7556
#
# java vm: java hotspot(tm) client vm (11.3-b02 mixed mode windows-x86)
# problematic frame:
# c [ntdll.dll 0x35385]
#
# an error report file with more information is saved as:
# d:\workspaces\client_axis\hs_err_pid7120.log
#
# if you would like to submit a bug report, please visit:
#
# the crash happened outside the java virtual machine in native code.
# see problematic frame for where to report the bug.
#
小弟先谢谢了,qq:492833803
希望你能加上我!!!  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2011-11-04 16:25 
学习了 很不错的  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2011-11-17 21:45 
想请问一下楼主,jdk7下能用吗?现在的最新版本是多少啊?  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2011-11-18 11:59 

这里下载  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2011-12-07 14:16 
楼主~我将word文档上传到了服务器~然后在服务器上配置好了jacob的东西~但是在客户端调用的时候~jacob打开的是服务器的office程序~不是我机子上的office程序~我想在调用时服务器打开的是我机子上的office程序这该怎么做啊??我的是web项目~  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2011-12-12 20:29 
@陈鸿飞
web是b/s结构是通过浏览器访问服务器的,而你所要实现的时候c/s结构,这是很难实现的,因为你不可能自己制作浏览器,和改造office,唯一的方法,是下载到本地再打开,目前很多浏览器自带的下载软件都支持直接打开,你可以找这方面的资料,接下来可以你会遇到上传的问题,那这个就涉及上传的覆盖权限,即更新(删除和上传)权限,这需要你服务器上做设置,再利用原有的上传代码上传上去,一个比较好的做法可能是,在你的上传代码中加入密码,以实现权限的访问,这是在b/s结构中使用到的方法。 见识浅薄,提供参考。  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-02-21 10:50 
请问如果我想使用  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-02-21 10:52 
请问如何使用jacob解析word中的选择框呢?就是判断选择了第几项!我使用了poi但是只能解析出来文字,使用jacob也是?  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2012-02-26 22:18 
variantchangetype failed这个错误怎么解决的  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-05-23 10:04 
同样的问题啊@cc
variantchangetype failed这个错误怎么解决的,是不是jni变量转换错误引起的还是其他原因?  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-07-30 15:17 
我的服务器是windowsxp 然后我是用weblogic部署的工程
我工程里已经放入了jar包和dll文件,但为什么我访问时还会报
java.lang.noclassdeffounderror这个错误呢,日志中显示这错误
是由 activexcomponent app = new activexcomponent("word.application"); 这句引起的。 我的服务器上需要进行什么配置吗,我本机也没有什么配置用tomcat测试就完全没有问题,这是什么原因呢  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-11-06 14:49 
@大起大落
请问你是怎么解决的  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2012-11-29 17:12 
@cc
请问你解决了没有  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-12-18 11:32 
怎么转换成pdf  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2013-03-23 17:46 
exception in thread "main" com.jacob.com.comfailexception: can't get object clsid from progid
at com.jacob.com.dispatch.createinstancenative(native method)
at com.jacob.com.dispatch.(dispatch.java:99)
at com.jacob.activex.activexcomponent.(activexcomponent.java:58)
at d2p.doctopdf(d2p.java:65)
at d2p.main(d2p.java:106)
  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2013-09-07 10:25 
遇到问题:com.jacob.com.comfailexception: can't map name to dispid: getrecognizer
请问如何解决啊,好久了没弄明白  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2014-10-30 16:40 
谁碰到过下面这种情况
将excel转换成pdf的时候,使用了exportasfixedformat方法。
在tomcat中测试ok,
在websphere中测试,发生了excel.exe进程停止不执行的问题。
奇怪的是word就没有问题,可以执行。
  回复  
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2015-04-21 09:35 
关于excel转换成pdf出错的问题,我最后的调查结果是远程服务器对于excel的权限配置问题。

使用dcomcnfg命令,修改excel的identity属性,设置成this user访问就可以结觉。

网上说这样设置,不用用户登陆服务器也可以访问。
我测试了,word可以,excel如果不登陆还是不行,不知道什么原因。

测试环境:office2010 64bit,server2008 r2 64bit  回复  
  

只有注册用户后才能发表评论。


网站导航:
              
相关文章:
 
网站地图