我想从我的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