我想從我的Java-App中的MS-Word模板中打開一個新文檔,但只能編輯模板本身。從模板創建新文檔
這是我的情況: 我的jar文件裏面是一個單詞模板,它被複制到用戶指定的位置,所以他/她可以編輯它。之後,應用程序可以打開這個經過編輯的模板,將數據插入並用文字打開。這一切都很好(使用Apache-POI),但最後一步並不完全是我想要的。
通常,雙擊Word模板時,Word將打開一個新文檔(標題爲Document1),該文檔尚未保存在任何地方。在我的情況下,Word打開要編輯的文字模板(標題爲blablaMyTemplate),意思是已經保存的文檔應該從哪個模板創建。我如何設法使用Java從模板中打開新創建的文檔?
這是我的代碼(try/catch語句和流收盤略):
File bbb = new File(new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParentFile().getParentFile().getAbsolutePath() + "/blablaMyTemplate.dotx");
if (!bbb.exists()) { //copy file to outside of jar for user editing
Files.copy(Buchungsbegleitblatt.class.getResourceAsStream("bbb.dotx"), bbb.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
File tmp = File.createTempFile("bbb", ".dotx"); //create tmp file to insert data
InputStream in = new FileInputStream(bbb);
OutputStream out = new FileOutputStream(tmp);
XWPFDocument document = new XWPFDocument(in);
//here, some data is filled into the document using Apache-POI (omitted, because it works fine)
document.write(out);
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().open(tmp); //this opens the template for editing, it does not create a new doc from template
}
問題在於最後一行中,但我不知道還有什麼我可以打電話給在這裏。
爲了使它更清晰一點,這裏的上下文菜單中我得到的模板文件的圖像,什麼是應該發生的:
這個工程,非常感謝!我只是有一個輕微的後續問題:有沒有辦法檢測winword.exe是否真的存在?如果沒有,顯然會出現一個錯誤(「找不到windord.exe」,或者其他東西),但是對於我能夠產生的任何錯誤(例如:訪問被拒絕),該過程返回'1',所以我不能只在那個... – user2336377
目的是什麼?避免Windows錯誤消息?這是不可能的。爲此,我們將不得不在**之前檢查整個Windows系統是否安裝應用程序,我們嘗試啓動它。否則,'ProcessBuilder'可以將錯誤流與輸出流一起重定向到一個文件。或者你可以使用'process.getErrorStream();'從Process獲得錯誤流並從中讀取。 –
他們的目標是如下所述:檢查MSWord是否已正確安裝,如果是,請使用「ProcessBuilder」從模板啓動一個新文檔,否則從臨時文件夾中的模板中創建一個保存的文檔並打開它經常使用'Desktop.open(...)'(例如使用LibreOffice或用戶安裝的任何軟件)。 我會玩弄一下,看看我可以用'process.getErrorStream();'來管理什麼。再次感謝你的幫助。 – user2336377