這兩天由於工作需要對word 進行一些操作所以接觸到jacob 大致研究了一下感覺是一個挺好用的東西而且使用起來挺方便,可是在很關鍵的時候出了問題下面就和大家分享一下。 jacob 現在版本最高是1.9 但是我在使用時一直抱錯,所以我就用的是1.7版本。 裏面兩個文件時很有用的 一個是jacob.jar 一個是 jacob.dll jacob.jar 就是我們要使用的包是和java 交互的東西我們可以放進java的類庫中然後引入項目 項目中import com.jacob.com.*; import com.jacob.activeX.*; 這兩個就能使用 需要在環境變量中指明jacob.jar 的位置。 jacob.dll 是和com 交互的東西 我們需要把它放入windows/system32 中,而且在path中要指明它的位置,其實本人還不瞭解爲啥要在path 中指明它的路徑。 這樣我們就可以在項目中使用了:下面給一個例子: 類ReplaceWord.java import com.jacob.com.*; import com.jacob.activeX.*; public class ReplaceWord { public static void main(String[] args) { ActiveXComponent app = new ActiveXComponent("Word.Application"); //啓動word String inFile = "C://test.doc"; //要替換的word文件 boolean flag = false; try { app.setProperty("Visible", new Variant(false)); //設置word不可見 Object docs = app.getProperty("Documents").toDispatch(); Object doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[] {inFile, new Variant(false), new Variant(false)}, new int[1]).toDispatch(); //打開word文件,注意這裏第三個參數要設爲false,這個參數表示是否以只讀方式打開,因爲我們要保存原文件,所以以可寫方式打開。 Object content = Dispatch.get(doc, "Content").toDispatch(); //提取word文檔內容對象 Object finder = Dispatch.get(content, "Find").toDispatch(); //提取find對象,也就查找替換的那個對象 Variant f = new Variant(false); boolean rt = true; while (rt) { rt = Dispatch.invoke(finder, "Execute", Dispatch.Method, new Object[] {"New", f, f, f, f, f, f, f, f, "Old", new Variant(true)} , new int[1]).toBoolean(); //替換Old ---> New } Dispatch.call(doc, "Save"); //保存 Dispatch.call(doc, "Close", f); flag = true; System.out.println("is over"); } catch (Exception e) { e.printStackTrace(); } finally { app.invoke("Quit", new Variant[] {}); } } } 這個例子我測試過可以就是替換word中的文字註釋也很清楚我就不多說了使用jb9 ---------------------------------------- 下面就是我的問題了。 這段代碼在web 項目中使用的時候當在tomcat 4.1下能夠正常地工作,但是當使用weblogic 就會抱錯 1 :java.lang.NoClassDefFoundError 2 :java.lang.UnsatisfiedLinkError: no jacob in java.library.path 這兩個錯誤都會出現很讓人鬱悶。請各位高手幫幫忙看是哪裏出了問題。 同時也請對該貼關注的朋友幫忙頂頂別沉下去了,如果那位想要其它的操作比如插入文字,插入表格 表格行替換,插入圖片等等我都已經寫好(能夠使用)。但是沒有在web項目下測試。都可以留言我會給出代碼。 最後多謝各位支持,問題解決就散分 |
jialin_2004(老貓) 於 2005-8-26 17:27:32 |
可能是weblogic調用的jre不對吧 |
jialin_2004(老貓) 於 2005-8-26 17:29:03 |
至於路徑不用在path裏面設吧 |
xdop(鴻飛處) 於 2005-8-26 17:32:43 |
關注jacob,呵呵 建議: 既然看到是類似 java.lang.NoClassDefFoundError 以及 no jacob in java.library.path 還不趕緊檢查服務器環境以及應用部署是不是出現遺漏,呵呵 |
bob_thb(綠果) 於 2005-8-26 17:51:11 |
學習啊,幫頂一下下! |
simon0512(蟲蟲) 於 2005-8-26 23:03:48 |
學習 |
emailfly(匆匆過客) 於 2005-8-26 23:17:53 |
學習一下 我都看不懂是什麼意思了 |
xjhlzl(花烏鴉) 於 2005-8-29 11:11:01 |
這兩天在休息,沒有及時跟貼不好意思。先謝謝各位的關注 我已經在path中指明瞭dll文件的位置,而且在classpath中引入了.jar文件可是還是不行。 因爲在tomcat下能夠運行,所以我開始懷疑是weblogic jdk的問題以前的事1.4.1 但是修改爲1.4.2還是不行 聽別人說,.dll文件 如果方到系統文件下就可以不用在path裏設置了 -----------------------------引Polarislee(北極星)------------ 在Classpath裏面添加對DLL的引用應該不對吧。Windows系統中對DLL的查找順序應該是: 1.內存 2.KnownDLLs 3.清單與 .local 4.應用程序目錄 5.當前工作目錄 6.系統目錄(%systemroot%、%systemroot%/system 和 %systemroot%/system32) 7.路徑變量 ------------------------------------------------ 已經把weblogic中startWebLogic.cmd這個文件裏面的CLASSPATH定義的地方添加你的這些dll文件 現在是第一次抱 no jacob in java.library.path 然後就是抱 java.lang.NoClassDefFoundError 的錯 |
chensheng913(鍵者天行) 於 2005-8-29 16:22:11 |
頂! |
xjhlzl(花烏鴉) 於 2005-8-29 16:22:55 |
自己頂頂吧! 希望別沉了 |
TomyGuan(Tomy) 於 2005-8-29 17:39:14 |
jacob是不是只是在window中運行的?????? |
xjhlzl(花烏鴉) 於 2005-8-30 10:53:25 |
我是在windows下運行的,應該支持其他的操作系統。不過我不確定。 官方網站上說“It uses JNI to make native calls into the COM and Win32 libraries.”我想能夠支持其他的操作系統吧! ----------------------------------------------- 言歸正轉: 昨天把 jacob.dll文件copy到jdk1.4.2/jre/bin 下結果就認到了,總算認到了呀!花了好多天真辛苦。不錯又遇到了其他的問題錯誤如下: com.jacob.com.ComFailException: A COM exception has been encountered: At Invoke of: Documents 報錯的是Object docs = app.getProperty("Documents").toDispatch();一行 這樣看來認不出來com 是不是應爲jacob.jar 的問題呀!真是好艱辛。多謝各位的支持。希望繼續關注 |
layueer(愛傷懷,努力昇仙) 於 2005-8-30 11:01:43 |
up |
xjhlzl(花烏鴉) 於 2005-8-30 15:12:07 |
終於搞出來了。 在這裏還是大致總結一下吧!希望以後對大家有用的着: 我先說一下配置: 1如果是web程序你注意的就是用什麼工具發佈。一定要要修改用來發布程序的容器的jre也就是虛擬機之類的東西,把jacob.dll文件copy到對應的連接庫中也就是D:/bea/jdk141_03/jre/bin 如果你也是使用單獨的中間鍵發佈程序一定要修改,不然就會報錯: com.jacob.com.ComFailException: A COM exception has been encountered: At Invoke of: Documents 2在一個就是版本的問題,我一開始使用的版本是 jacob1.7 在jdk版本是jdk141_03 但是也報錯,後來我把它的jacob.dll文件該成1.9的就好了,我也沒有做別的測試。 1.7版本.jar.dll的在jb9+tomcat4.1+jdk1.4.1或1.4.2都可以正常使用。 就說這些吧!如果有別的問題就留言吧! |
j_d(簡) 於 2005-8-30 15:19:47 |
做過這種項目了,幫你頂,你的問題應該是jacob沒找到,把他放在系統classpath中,我記得還要把jacob.dll放在系統的path路徑中,祝你好運! |
relup(撲樂) 於 2005-8-30 15:36:20 |
1、我腦子笨,所以不推薦樓主用類庫的方法,這樣要學習,笨蛋們都搞不過來 2、既然這麼說,我是有別的處理辦法的,很土,但是很管用 3、簡單一點就是用JAVA APPLICANTION 中用EXE方法直接打開WORD進行編輯(可行) 4、至於用JAVA生成WORD的方法,很多很多,不是釣胃口,只是我沒有完全實踐,差表格部分沒有驗證,其他OK |
lancelobb(蘭斯洛特) 於 2005-8-30 16:59:40 |
mark |
xjhlzl(花烏鴉) 於 2005-9-1 11:56:41 |
一個實例: import com.jacob.com.*; |
關於使用jacob操作word某論壇載錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.