Seite 1 von 1

python Dokumentwiederherstellung

Verfasst: Mi 18. Feb 2026, 18:17
von gerderich
Moin zusammen,
mit python öffne ich ein definiertes calc file. Das funktioniert ausgezeichnet mit

Code: Alles auswählen

        args = (PropertyValue(Name='Hidden', Value=False),PropertyValue(Name="MacroExecutionMode",Value=1),)
	path="/home/gerd/Dokumente/Sudeck/python_test.ods"
        docurl = uno.systemPathToFileUrl(path)
        desktop = context.ServiceManager.createInstanceWithContext(
			"com.sun.star.frame.Desktop", context)
        document = desktop.loadComponentFromURL(docurl,"_default",0,args)
        print ("calc dokument ist geladen!")
Schleißen des Dokumtes, beenden von Libreoffice und beenden des Scriptes mache ich mit

Code: Alles auswählen

     spreadsheet.close(True)
     sys.exit()
Auch das funktioniert.
Wenn ich das Dokument jetzt wieder öffne, erscheint der LO Dialog "Dokumentwiederherstellung" . Das Dokument wird aber fehlerfrei geladen und dahinter angezeigt.
Wie kann ich das Anzeigen des Dialoges verhindern. Augenscheinlich ist das Dokument ja in Ordnung. Aber:
Öffne ich das Dokument manuell, wird auch der Dialog angezeigt, das Dokument aber nicht.
Wo kann ich den Fehler finden?
Gruß
Gerd Erich

Re: python Dokumentwiederherstellung

Verfasst: Do 19. Feb 2026, 00:57
von karolus
Hallo
Den »desktop« initialisiere ich gewöhnlich mit

Code: Alles auswählen

    desktop = XSCRIPTCONTEXT.getDesktop()
bevor du die Datei schliesst möchtest du doch speichern?!

Code: Alles auswählen

    doc.store()
    doc.close(True)
und du möchtest mit ziemlicher Sicherheit NICHT:

Code: Alles auswählen

    sys.exit()

Re: python Dokumentwiederherstellung

Verfasst: Do 19. Feb 2026, 11:36
von gerderich
Moin Karolus,
vielen Dank für Deine schnelle Reaktion.
karolus hat geschrieben:
Do 19. Feb 2026, 00:57
Den »desktop« initialisiere ich gewöhnlich mit

Code: Alles auswählen

    desktop = XSCRIPTCONTEXT.getDesktop()
Diesen Tipp kannte ich schon. Nutze ich nicht, weil ich damit regelmäßig einen Fehler provoziere. In diesem Fall:

Code: Alles auswählen

Calc File nicht gefunden: name 'XSCRIPTCONTEXT' is not defined
XSCRIPTCONTEXT verhindert den angesprochen Fehler nicht. Es wird mit der Code Zeile ein weiterer Fehler initiiert. Schade...
bevor du die Datei schliesst möchtest du doch speichern?!
Ja, möchte ich, aber zunächst soll ein definiertes CALC Dokument fehlerfrei zum Bearbeiten geöffnet, bearbeitet und dann wieder fehlerfrei geschlossen werden.
und du möchtest mit ziemlicher Sicherheit NICHT:

Code: Alles auswählen

    sys.exit()
Warum nicht? In jeder mit bekannten Python Doku wird die Frage nach: Wie beende ich ein Python Script mit eben : z.B. mit sys(exit) beantwortet. Unter anderem weil bei dieser Methode ein auswertbarer Fehler Code mitgeliefert wird.
Und natürlich muss ein Dokument ordentlich geschlossen werden. Was also ist an sys.exit() falsch? Okay, ich könnte vorher ein doc.close(True) machen. Hab ich gemacht, der Fehler bleibt. Wat nu?
Jedenfalss hilft ein

Code: Alles auswählen

spreadsheet.close(True)
# oder auch 
#doc.close(True)
auch nicht weiter.
Danke für Deine mit Sicherheit gut gemeinten Tipps. Da die nicht helfen, mache ich mit Sicherheit einen kleinen aber wichtigen Denkfehler.
Nebenbei: Wenn ich das File mit ein paar BASIC Zeilen öffne und schließe, funktioniert das Ganze fehlerfrei. Muss doch in PYTHON dann auch gehen. BASIC ist in diesem Fall keine Option.
Oder liegt es an der Libreoffice Version? Ich nutze:25.2.3.2 auf Debian Bookworm.
Gruß
Gerd Erich

Re: python Dokumentwiederherstellung

Verfasst: Do 19. Feb 2026, 12:44
von karolus
1. Möchtest du weiterhin unqualifizierte Behauptungen aufstellen?!
ODER
2. brauchst du strukturierte Hilfestellung?

Re: python Dokumentwiederherstellung

Verfasst: Do 19. Feb 2026, 19:07
von gerderich
Moin Karolus,
karolus hat geschrieben:
Do 19. Feb 2026, 12:44
1. Möchtest du weiterhin unqualifizierte Behauptungen aufstellen?!
Welche Behauptung meinst Du?
karolus hat geschrieben:
Do 19. Feb 2026, 12:44
ODER
2. brauchst du strukturierte Hilfestellung?
Strukturierte Hilfestellung wäre schön, aber leider haben die oben genannten Tipps ja nicht zum Erfolg geführt. Z.B. habe ich die Fehlermeldung bezüglich XSCRIPTCONTEXT mir nicht aus den Fingern gesogen, sondern aus meiner Log Datei zitiert.
Das ich zunächst mal ein vernünftiges öffnen uns fehlerfreies Schließen einer CALC Arbeitsmappe mit Python hinbekommen möchte, kann ja augenscheinlich nicht als Bemerkung eher als Problemstellung gewertet werden. Soweit, ich mag mich irren.
Egal, ich werde hier zu diesem Thema nicht weiter fragen. Tut mir leid, gestört zu haben.
Gruß
Gerd Erich

Re: python Dokumentwiederherstellung

Verfasst: Do 19. Feb 2026, 21:29
von mikele
Hallo,
um meine Pythonkenntnisse zu erweitern, habe ich es versucht nachzustellen.

Code: Alles auswählen

import uno
from com.sun.star.beans import PropertyValue 


def laden():
    desktop = XSCRIPTCONTEXT.getDesktop()
    args = (PropertyValue(Name='Hidden', Value=False),PropertyValue(Name="MacroExecutionMode",Value=1))
    path=r"pfad_zur_datei.ods"
    docurl = uno.systemPathToFileUrl(path)
    document = desktop.loadComponentFromURL(docurl,"_default",0,args)
    document.close(True)
macht bei mir genau das was du willst. Die Datei wird geöffnet, geschlossen und beim manuellen Öffnen kommt kein Wiederherstellungsdialog ...
Das wird aber alles schon so klar sein, es fehlen einfach Infos um zu wissen, wo das Problen steckt.
Deine Codezeilen

Code: Alles auswählen

document = desktop.loadComponentFromURL(docurl,"_default",0,args)

Code: Alles auswählen

spreadsheet.close(True)
passen einfach nicht zueinander.