私はJava-AppからMS-Wordテンプレートから新しい文書を開きたいが、テンプレート自体を編集することしかできない。テンプレートから新しい文書を作成
ここに私の状況はあります: 私のJarファイルの中には単語テンプレートがあり、そのユーザーが指定した場所にコピーされて編集できます。その後、アプリケーションはこの編集されたテンプレートを開いてデータを挿入し、単語で開くことができます。これはすべて正常に動作します(Apache-POIを使用します)が、最後のステップは完全に私が望むものではありません。
通常、単語テンプレートをダブルクリックすると、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'からErrorストリームを取得し、これから読み取ることができます。 –
目的は次の通りです:MSWordが正しくインストールされているかどうかをチェックし、もしそうなら 'ProcessBuilder'を使ってテンプレートから新しい文書を起動します。さもなければ、定期的に 'Desktop.open(...)'を使用しています(例えば、LibreOfficeを使用するか、ユーザがインストールしたものであれ)。 私はちょっと遊んで、 'process.getErrorStream();'で管理できるものを見ていきます。あなたの助けをもう一度ありがとう。 – user2336377