随笔 - 303  文章 - 883  trackbacks - 0
<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

欢迎光临! 
闲聊 QQ:1074961813

随笔分类(357)

我管理的群

公共blog

  • n维空间
  • Email : java3d@126.com 群 : 12999758

参与管理的论坛

好友的blog

我的其他blog

朋友的网站

搜索

  •  

最新评论

大家好啊! 我是寻觅       

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

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

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

jacob.png

值得注意的是,不同的版本的系统使用不同的dll文件
所以如果你编译成功,但运行失败一般是dll文件问题
遇到这种情况,可以到
http://downloads.sourceforge.net/jacob-project/jacob_1.9.zip?modtime=1109437002&big_mirror=0

下载其他的版本的 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 小寻 阅读(54570) 评论(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.<clinit>(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 admin
这不就是本身的例子吗 还说是你做的 呵呵 真行  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2007-09-11 10:20 幻想~@@~
难道你一开始写的代码不是照例子写的吗?牛人~~
眼睛 => "// 改了这里"   回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2007-11-28 09:37 jim
楼主用的是什么版本的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文档转换器
http://jooreports.sourceforge.net/
也许这个正是你需要的  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-04-01 15:19 lf
com.jacob.com.ComFailException:Can't get object clsid from progid出现一个这样的错误!  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-04-11 15:41 qweqwe
@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 ww
@郁林
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 sfds
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 xiaolu
不错,不错。支持一下。  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-07-30 17:21 酸枣—JAVA
这几天我也在做这个,功能是实现了,在调用模板路径的时候路径是固定情况就可以,如果模板路径不是固定的,而是用方法得到,就会报这个错:
jacob.com.ComFailException: Invoke of: Open
  回复  更多评论
  
# re: jacobʹ�����ż�������� ~~~~~~~~~~~ ������ 2008-08-13 17:53 eydp@163.com
Can't get object clsid from progid����Ҳ��������������ڵ�������⣬�ҵıʼDZ����Ǻõģ�װ��XPϵͳ����װ���������ϾͲ����ã�����ϵͳ��2003��������JDK�ȶ���һ���ģ���֪�Dz��Ǹ�����ϵͳ�йأ��һ���һ��dll��jar�ļ�Ҳ���Dz��У�
  回复  更多评论
  
# re: jacobʹ�����ż�������� ~~~~~~~~~~~ ������ 2008-08-13 17:57 eydp@163.com
Can't get object clsid from progid,我的也出现了这个报错,我在笔记本上是好的,但移动服务器上就不行了,唯一的区别就是一个装的XP,另一个是2003,其它的什么JDK,tomcat等都是一样的,我换了一个dll和相应的jar都不行,是不是还与操作系统有关,或是2003下面不能用  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-08-18 09:26 nathan.he
@eydp@163.com

我也遇到同样问题,xp下正常使用,2003就不能用了,急救。。。。有没有谁知道原因?  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-08-18 11:30 nathan.he
2003系统下如果报错
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\jacob-1.14-x86.dll: 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
请安装Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)吧,
地址如下
http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en


  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-08-22 16:27 Nihao
楼主,有没有什么jacob的学习资料(除了它自带的那些)  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2008-11-01 09:38 tzlyxxg@163.com
朋友您好 我最近在用这个的时候很不稳定 连续处理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 jacky
您好,最近我用了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.<init>(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 Jacky
WEB服务器是TOMCAT5.0,JDK是1.4的.系统是WIN2003.
很郁闷的问题.这种情况一般是一天出现一次,服务器就趴掉了.
网上找了好久,也没找到解决办法。  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-15 11:57 Jacky
开始在一台双核,4G内存的服务机上,打开WORD需要30+秒,一天服务器要趴好几次,都是报的这个异常.
实在没办法,转移到另一台机器上,动态出WORD是正常了,大概4~5秒的时间,不过还是会报这个异常,就是一天基本一次了。
实在郁闷...
  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-16 00:43 小寻
根据您提供的各种信息(异常和环境),我个人认为问题应该出在软件环境上,您可以检查一下JVM、JACOB、NT版本是否匹配?希望我的分析对您解决该问题能起到参考作用。  回复  更多评论
  
# re: jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2008-11-16 10:23 Jacky
恩,我也估计是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 wo dei
我冲你上面
下的1.9 怎么没有jar包啊  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-03-03 12:11 LD
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 LD
上面的问题解决了,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 test
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.<clinit>(JacobObject.java:108)
at testyh.D2P.<init>(D2P.java:14)
at testyh.D2P.main(D2P.java:108)

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

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


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




--------------------------------------------------------------------------------
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 java
请问如果该word文档不存在,出现调用异常的时候,想创建一个word文档,怎么做啊。  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2009-09-24 16:25 OK网赚吧
www.1ok5ok.com免费网络赚钱大集合!新手学习天地!  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2009-12-11 09:07 carrie
我出现了
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.<init>(Dispatch.java:101)
at com.jacob.activeX.ActiveXComponent.<init>(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 mianhuatangone
hen hao wo xiang shi yong  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2010-04-10 22:22 mianhuatangone
xie xie   回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2010-04-24 16:15 zlc
有没.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 dd
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 yumei721
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 pc_grass
@金灯剑
你好,我现在就是遇到了这个问题: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:
# http://java.sun.com/webapps/bugreport/crash.jsp
# 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 DQWang
想请问一下楼主,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 333
请问如果我想使用  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-02-21 10:52 
请问如何使用jacob解析word中的选择框呢?就是判断选择了第几项!我使用了poi但是只能解析出来文字,使用jacob也是?  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2012-02-26 22:18 cc
VariantChangeType failed这个错误怎么解决的  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-05-23 10:04 yumen
同样的问题啊@cc
VariantChangeType failed这个错误怎么解决的,是不是jni变量转换错误引起的还是其他原因?  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-07-30 15:17 gc
我的服务器是windowsXP 然后我是用weblogic部署的工程
我工程里已经放入了jar包和dll文件,但为什么我访问时还会报
java.lang.NoClassDefFoundError这个错误呢,日志中显示这错误
是由 ActiveXComponent app = new ActiveXComponent("Word.Application"); 这句引起的。 我的服务器上需要进行什么配置吗,我本机也没有什么配置用tomcat测试就完全没有问题,这是什么原因呢  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-11-06 14:49 qingbyqing
@大起大落
请问你是怎么解决的  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友[未登录] 2012-11-29 17:12 sj
@cc
请问你解决了没有  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2012-12-18 11:32 wuxin
怎么转换成Pdf  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2013-03-23 17:46 hula
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.<init>(Dispatch.java:99)
at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java:58)
at D2P.docToPDF(D2P.java:65)
at D2P.main(D2P.java:106)
  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2013-09-07 10:25 jzg
遇到问题:com.jacob.com.ComFailException: Can't map name to dispid: GetRecognizer
请问如何解决啊,好久了没弄明白  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2014-10-30 16:40 andh
谁碰到过下面这种情况
将excel转换成pdf的时候,使用了ExportAsFixedFormat方法。
在Tomcat中测试OK,
在WebSphere中测试,发生了Excel.exe进程停止不执行的问题。
奇怪的是Word就没有问题,可以执行。
  回复  更多评论
  
# re: [原创]jacob使用入门及问题解析 ~~~~~~~~~~~ 回网友 2015-04-21 09:35 andh
关于Excel转换成PDF出错的问题,我最后的调查结果是远程服务器对于Excel的权限配置问题。

使用Dcomcnfg命令,修改Excel的identity属性,设置成This user访问就可以结觉。

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

测试环境:Office2010 64bit,Server2008 R2 64bit  回复  更多评论
  

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


网站导航: