Ich möchte ein neues Dokument aus einer MS-Word-Vorlage aus meiner Java-App öffnen, aber nur verwalten, um die Vorlage selbst zu bearbeiten.neues Dokument von Vorlage erstellen
Hier ist meine Situation: Innerhalb meiner Jar-Datei ist eine Word-Vorlage, die an einen benutzerdefinierten Speicherort kopiert wird, so dass er/sie es bearbeiten kann. Anschließend kann die Anwendung diese bearbeitete Vorlage öffnen, Daten einfügen und in Word öffnen. Das alles funktioniert gut (mit Apache-POI), aber der letzte Schritt ist nicht ganz das, was ich will.
Normalerweise würde Word beim Doppelklicken auf eine Word-Vorlage ein NEUES Dokument (mit dem Titel "Document1") öffnen, das noch nirgendwo gespeichert ist. In meinem Fall öffnet Word die Word-Vorlage zur Bearbeitung (betitelt blablaMyTemplate), also die bereits gespeicherte Vorlage, aus der Dokumente erstellt werden sollen. Wie kann ich ein neu erstelltes Dokument mit Java aus der Vorlage öffnen?
Dies ist mein Code (try/catch und Strom Schließung weggelassen):
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
}
Das Problem liegt in der letzten Zeile, aber ich habe keine Ahnung, was sonst ich hier nennen könnte.
es ein wenig klarer zu machen, hier ist ein Bild des Kontextmenüs ich auf der Template-Datei und was geschehen soll:
Das funktioniert, vielen Dank! Ich habe nur eine kleine Follow-up-Frage: Gibt es eine Möglichkeit zu erkennen, ob winword.exe tatsächlich existiert? Wenn dies nicht der Fall ist, wird offensichtlich ein Fehler ausgelöst ("windord.exe konnte nicht gefunden werden" oder etwas), aber der Prozess gibt '1' für jeden Fehler zurück, den ich erzeugen konnte (zum Beispiel: Zugriff verweigert), also Ich kann nicht nur darauf gehen ... – user2336377
Was ist das Ziel? Windows-Fehlermeldung vermeiden? Dies wird nicht möglich sein. Dazu müssten wir das gesamte Windows-System untersuchen, ob die Anwendung installiert ist oder nicht ** bevor ** wir versuchen, es zu starten. Andernfalls kann der 'ProcessBuilder' den Error-Stream zusammen mit dem Ausgabestream in eine Datei umleiten. Oder Sie könnten den Error-Stream vom 'Process' mit' process.getErrorStream(); 'abrufen und daraus lesen. –
Ihr Ziel wäre es, dies wie folgt zu tun: Überprüfen Sie, ob MSWord korrekt installiert ist, und falls ja, starten Sie ein neues Dokument mit dem 'ProcessBuilder' aus der Vorlage, ansonsten erstellen Sie ein gespeichertes Dokument aus der Vorlage in einem temporären Ordner und öffnen es Es verwendet regelmäßig 'Desktop.open (...)' (zum Beispiel mit LibreOffice, oder was auch immer der Benutzer installiert hat). Ich werde ein wenig herumspielen und sehen, was ich mit 'process.getErrorStream();' verwalten kann. Danke nochmal für deine Hilfe. – user2336377