Über eine VB-Form öffne ich automatisiert den LibreOffice-Writer, erstelle dort ein neues Dokument und füge automatisiert Text in Platzhalter ein. Anschließend wird das Dokument gespeichert.
Nun habe ich folgendes Problem: Ich kann zwar das Writer-Dokument selbst schließen, Writer selbst aber nicht mehr. Ein Klick auf das "X" am oberen rechten Fensterrand bewirkt nichts. Wenn ich dagegen die VB-Form schließe (was im täglichen Workflow natürlich nervig ist), kann ich auch Writer schließen. Manchmal kann ich Writer auch schließen, wenn die VB-Form noch offen ist. Dies geht jedoch meist erst nach fünf bis zehn Minuten.
Irgendwo scheint es noch eine Verbindung zwischen der VB-Form und Writer zu geben, auch wenn das eigentliche Textdokument schon geschlossen wurde. Diese "unsichtbare" Verbindung wird erst durch das Schließen der Form sicher gekappt. Hat jemand eine Idee, woran das grundsätzlich liegen könnte?
Nun habe ich folgendes Problem: Ich kann zwar das Writer-Dokument selbst schließen, Writer selbst aber nicht mehr. Ein Klick auf das "X" am oberen rechten Fensterrand bewirkt nichts. Wenn ich dagegen die VB-Form schließe (was im täglichen Workflow natürlich nervig ist), kann ich auch Writer schließen. Manchmal kann ich Writer auch schließen, wenn die VB-Form noch offen ist. Dies geht jedoch meist erst nach fünf bis zehn Minuten.
Irgendwo scheint es noch eine Verbindung zwischen der VB-Form und Writer zu geben, auch wenn das eigentliche Textdokument schon geschlossen wurde. Diese "unsichtbare" Verbindung wird erst durch das Schließen der Form sicher gekappt. Hat jemand eine Idee, woran das grundsätzlich liegen könnte?
VB.NET-Quellcode
- Sub musterbrief_libreoffice()
- Try
- Dim oSM, oDesk, oDoc, oReplace As Object
- Dim aNoArgs(-1) As Object
- oSM = CreateObject("com.sun.star.ServiceManager")
- oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
- oDoc = oDesk.loadComponentFromURL("file:///" & Replace(var_pfad_musterbriefe, "\", "/") & "/" & var_Dokumenten_Art, "_blank", 0, aNoArgs) 'Öffnet das Musterdokument
- oReplace = oDoc.createReplaceDescriptor
- 'Nachfolgend wird das Writer-Dokument nach bestimmten Strings durchsucht. Diese werden dann durch die Programmvariablen ersetzt
- oReplace.SearchString = "{Vorname}"
- oReplace.ReplaceString = CStr(var_vorname)
- oDoc.replaceAll(oReplace)
- oReplace.SearchString = "{Nachname}"
- oReplace.ReplaceString = CStr(var_nachname)
- oDoc.replaceAll(oReplace)
- If System.IO.File.Exists(CStr(var_worddokument_pfad_doc)) = False Then
- var_worddokument_pfad_doc = Replace(var_worddokument_pfad_doc, "\", "/")
- oDoc.storeAsURL("file:///" & var_worddokument_pfad_doc, aNoArgs) 'Speichert das Musterdokument
- Else
- Me.Focus()
- Me.Activate()
- MsgBox("Achtung! Eine Datei mit dem gleichen Namen besteht bereits. Bitte speichern Sie das geöffnete Worddokument von Hand und wählen Sie einen Dateinamen nach Wunsch.")
- End If
- oDoc = Nothing
- oDesk = Nothing
- oSM = Nothing
- oReplace = Nothing
- Catch ex As Exception
- MsgBox("An exception occurred:" & vbCrLf & ex.Message)
- End Try
- End Sub