透過 JACOB 操作 Office 進行轉檔的過程,而最終產出結果為 HTM 檔
接著就以一個 Word 操作的 Sample 來介紹
//..... String officeFilePath = "C:\\abc.doc"; //word 檔 String HtmFilePath = "C:\\abc.htm"; //轉出檔 //初始化 Wrod ActiveXComponent activeX_App = new ActiveXComponent("Word.Application"); try{ //將操作 office 的過程設定為背景執行 activeX_App.setProperty("Visible", new Variant(false)); // 取得 該 Word 的Dispatch 物件,透過設置Property 為 "Documents" Dispatch prop = activeX_App.getProperty("Documents").toDispatch(); //載入 word 檔案並開啟 運用 Dispatch.invoke(...).toDispatch() 返回一個 Dispatch 物件 Dispatch office = Dispatch.invoke( prop, "Open", Dispatch.Method, new Object[] {officeFilePath, new Variant(false), new Variant(true) }, new int[1]).toDispatch(); //將 word 文件另存成 HTM 檔 Dispatch.invoke(office, "SaveAs", Dispatch.Method, new Object[] {mhtFilePath, new Variant(8)}, //WORD 轉 HTM 的代碼為 8 new int[0]); Dispatch.call(office, "Close"); //關閉 Word }catch(Exception e){ e.printStackTrace(); }finally{ activeX_App.invoke("Quit"); }
看到底上的 word 試例,PPT和Excel 的話就大同小異了
PPT 的話 初始過程需為
AActiveXComponent activeX_App = new ActiveXComponent("PowerPoint.Application");
Dispatch prop = activeX_App.getProperty("Presentations").toDispatch();
而 PPT 轉 HTM 的代碼為 12
而 Excel 期初始化過程為
ActiveXComponent activeX_App = new ActiveXComponent("Excel.Application");
Dispatch prop = activeX_App.getProperty("Workbooks").toDispatch();
而其轉 HTM 的代碼為 44
說到這 如果轉出 HTM 檔時有產生一個資料夾的話((..好像有時候不會?!?!
因位最近工作時遇到的情況是 我們 AP 是在 Linux 下,故需透過 Windows 運用 JACOB將 Office 轉檔
所以透過程式先將檔案由 Linux 送到 Window ...待轉檔成功後再回 Linux
問題來了,送一個 Office 過去,但卻要收一個 HTM 檔和一整包的資料夾 真是挫賽阿....
所幸 MS Office 提供了另一種網頁格式 MHTML
我們可以將檔案轉成 .mht 檔即可解決會產生一包資料夾的問題
而各Office轉 .mht 的 code 如以下所示
Word : 9
PPT : 20
Excel : 45
沒有留言:
張貼留言