[gelöst] Tabellendokument über Makro schließen (wieder einmal)

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

[gelöst] Tabellendokument über Makro schließen (wieder einmal)

Beitrag von retuwe61 » Mo, 09.04.2018 09:51

Hallo miteinander.
Die Suche im Forum führte mich zu verschiedenen Lösungsansätzen. Deren Umsetzungen lösen mein Problem leider nicht:

Beim Öffnen des Dokuments wird in den Vollbildmodus geschaltet und ein Dialog mit Schaltflächen geöffnet.
Beim Klick auf den Button "Beenden" soll der Vollbildmodus ausgeschaltet und das Dokument ohne Speichern geschlossen werden.
Dabei erscheint sofort der "Dolumentwiederherstellungsdialog" und ich kann nicht erkennen, wo der Fehler liegt.
Wenn ich den Dialog händisch über "X" schließe, den Vollbildmodus und LibreOffice beende, erhalte ich keine Fehlermeldung.

Makro zum Schließen:

Code: Alles auswählen

Sub Tool_Ende
oDialog.endExecute()
oDoc = thisComponent
'------------------------
stopFullScreen 
'------------------------
oDoc.setModified(False)
oDoc.store(False)
wait 500
oDoc.close(true)
wait 500

'document   = ThisComponent.CurrentController.Frame
'dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
'dispatcher.executeDispatch(document, ".uno:CloseDoc", "", 0, Array())

'Shell("pkill soffice.bin")
end sub
Makro zum Ausschalten des Vollbildmodus:

Code: Alles auswählen

sub stopFullScreen()

   dim document   as object
   dim dispatcher as object
         
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

   dim args(0) as new com.sun.star.beans.PropertyValue
   args(0).Name = "FullScreen"
   args(0).Value = False

   dispatcher.executeDispatch(document, ".uno:FullScreen", "", 0, args())

end sub
Ich arbeite moentan unter Debian mit der LO-Version: 5.4.2.2

Ich habe die Datei angehängt. Vielleicht hat jemand eine Lösung.
Vielen Dank.
Gruß
Uwe
Dateianhänge
Unbenannt 2.ods
(10.61 KiB) 61-mal heruntergeladen
Zuletzt geändert von retuwe61 am Di, 10.04.2018 20:04, insgesamt 1-mal geändert.
Angewandt wird LibeOffice Version 5.1.6.2

Stephan
********
Beiträge: 10698
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Tabellendokument über Makro schließen (wieder einmal)

Beitrag von Stephan » Mo, 09.04.2018 12:48

Ich habe nicht die gleiche Programmversion am Laufen, kann deshalb nur folgende Beobachtungen mitteilen:

Mit LO 5.1.6 nur Probleme wenn vorher weitere Datei offen war.
Mit OO keine Probleme.

Abhilfe für LO (bei mir):
den schon im Makro vorhandenen Dispatcher-Code verwenden.

Hinweis:
der Fehler ist wahrscheinlich dadurch tangiert das oDoc.close(true) sich verschieden verhält in Abhängigkeit davon ob Du das letzte offenen Dokument schließt oder nicht, denn so ich mich richtig erinnere, bewirkt dieser Code (fehlerhafterweise) beim schließen des letzten Dokuments immer ein schließen des Gesamtprogramms ... naja, das hilft wohl nicht konkret weiter, mir fiel nur diese Besonderheit ein, da sie zumindest für OOo Eingang in die Literatur gefunden hat.



Gruß
Stephan

Toxitom
********
Beiträge: 3505
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Tabellendokument über Makro schließen (wieder einmal)

Beitrag von Toxitom » Mo, 09.04.2018 14:32

Hey Uwe,

die Logik passt nicht... und Dein Code auch nicht wirklich.
Beim Klick auf den Button "Beenden" soll der Vollbildmodus ausgeschaltet und das Dokument ohne Speichern geschlossen werden.
OK. Aber: Warum speicherst Du es dann trotzdem?

Code: Alles auswählen

oDoc.setModified(False)
oDoc.store(False)   '<--- ??????
wait 500
oDoc.close(true)
Die Zeile "oDoc.setModified(False)" bewirkt das zurücksetzen des Änderungsflags - beim Schliessen des Dokumentes kommt nun keine Rückfrage!
Speichern überflüssig!

Der Wunsch, das Dokument zu schliessen, hängt davon ab, ob noch Vetos eingelegt wurden (Prozesse, die den Schliessvorgang behindern). Mit "True" übergibst du den Prozess an alle Prozesse, die eine "CloseVetoExeption" abgegeben haben - nun müssen die Prozesse sehen, wie das Dokument geschlossen wird.
Schwer zu sagen, welche Prozesse dies bei Dir verhindern.
Mit "False" übernimmt Dein Prozess die Verantwortung, das Dokument sauber zu beenden (schliessen). Gab es aber noch ein "Veto", musst Du evt. den Schliessprozess einige Zeit später erneut probieren - oder die Listener einzeln abfragen.

Der Schliessbefehlt für das Dokument sollte im Übrigen immer der absolut letzte Befehl im Makro sein, wenn dieses selbst im Makro gespeichert ist. Denn auch das Makro im Dokument ist ja ein Prozess, der das Schließen desselbsen (gleichbedeutend mit dem beenden des Prozesses) behindert! Achtung hier...

viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

retuwe61
****
Beiträge: 159
Registriert: So, 18.11.2007 21:25

Re: Tabellendokument über Makro schließen (wieder einmal)

Beitrag von retuwe61 » Di, 10.04.2018 20:03

Ich danke euch beiden.
Mit dem dispatcher-Code hat es letztendlich doch geklappt.
@ Tom: Den Speicherbefehl hatte ich bei allmöglichen Versuchen vergessen zu deaktivieren.
Gruß
Uwe
Angewandt wird LibeOffice Version 5.1.6.2

Antworten