Schließen von LibreOffice nach befüllen eines Text-Dokuments mittels VB-Form nicht mehr möglich

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Schließen von LibreOffice nach befüllen eines Text-Dokuments mittels VB-Form nicht mehr möglich

    Ü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?

    VB.NET-Quellcode

    1. Sub musterbrief_libreoffice()
    2. Try
    3. Dim oSM, oDesk, oDoc, oReplace As Object
    4. Dim aNoArgs(-1) As Object
    5. oSM = CreateObject("com.sun.star.ServiceManager")
    6. oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
    7. oDoc = oDesk.loadComponentFromURL("file:///" & Replace(var_pfad_musterbriefe, "\", "/") & "/" & var_Dokumenten_Art, "_blank", 0, aNoArgs) 'Öffnet das Musterdokument
    8. oReplace = oDoc.createReplaceDescriptor
    9. 'Nachfolgend wird das Writer-Dokument nach bestimmten Strings durchsucht. Diese werden dann durch die Programmvariablen ersetzt
    10. oReplace.SearchString = "{Vorname}"
    11. oReplace.ReplaceString = CStr(var_vorname)
    12. oDoc.replaceAll(oReplace)
    13. oReplace.SearchString = "{Nachname}"
    14. oReplace.ReplaceString = CStr(var_nachname)
    15. oDoc.replaceAll(oReplace)
    16. If System.IO.File.Exists(CStr(var_worddokument_pfad_doc)) = False Then
    17. var_worddokument_pfad_doc = Replace(var_worddokument_pfad_doc, "\", "/")
    18. oDoc.storeAsURL("file:///" & var_worddokument_pfad_doc, aNoArgs) 'Speichert das Musterdokument
    19. Else
    20. Me.Focus()
    21. Me.Activate()
    22. 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.")
    23. End If
    24. oDoc = Nothing
    25. oDesk = Nothing
    26. oSM = Nothing
    27. oReplace = Nothing
    28. Catch ex As Exception
    29. MsgBox("An exception occurred:" & vbCrLf & ex.Message)
    30. End Try
    31. End Sub

    Evtl. musst du irgendwo noch .Close() oder ähnliches aufrufen.
    oDoc.Close()
    oDesk.Close()

    irgendwie sowas.

    bzw. hier steht was von .terminate
    forum.openoffice.org/en/forum/viewtopic.php?f=20&t=37023
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen