隨筆 - 303  文章 - 883  trackbacks - 0
          <2009年5月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          歡迎光臨! 
          閑聊 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 小尋 閱讀(54657) 評論(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 幻想~@@~
          難道你一開始寫的代碼不是照例子寫的嗎?牛人~~
          眼睛 => "http:// 改了這里"   回復  更多評論
            
          # 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??????????????????????????????????????õ?????XP??????????????????????ã?????????2003????????JDK???????????????????????????й??????????dll??jar??????????У?
            回復  更多評論
            
          # 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.aygfsteel.com/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  回復  更多評論
            
          主站蜘蛛池模板: 怀宁县| 泸定县| 康乐县| 石嘴山市| 金川县| 太湖县| 会东县| 靖远县| 吉木萨尔县| 扬州市| 富源县| 甘肃省| 荥经县| 康乐县| 余干县| 临湘市| 即墨市| 南投县| 来宾市| 溧水县| 海晏县| 武川县| 南漳县| 镇巴县| 罗城| 巨野县| 满城县| 宜昌市| 贵德县| 怀远县| 常德市| 鄯善县| 瓦房店市| 河池市| 宁陕县| 洛川县| 五家渠市| 朝阳市| 尚义县| 门源| 南召县|