Freigegebenes Dokument aktualisieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

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

Re: Freigegebenes Dokument aktualisieren

Beitrag von Stephan »

Im Moment sehe ich die Änderungen anderer Nutzer nur, wenn ich auf Speichern klicke - bei den anderen Nutzern entsprechend. Die Autosave-Funktion liefert nicht das gewünschte Ergebnis. Auch "Neu Laden" ist nicht, was ich suche, da dann ggfs. eigene Änderungen verworfen werden.
mmh ... wie ist das zu verstehen? Es funktioniert also, wenn Du auf Speichern klickst und Du hast, mutmaßlich weil Du das nicht tun müssen möchtest, nun versucht die Auto-Speichern-Funktion (Extras-Einstellungen/Optionen-...) stattdessen zu nutzen.
Wieso aber kommt dann "Neu Laden" überhaupt in Betracht? Nach meinem derzeitigen Verständnis käme das doch ohnehin nicht in Betracht, weil es ja auch manuell ausgelöst werden müsste.

Was verstehe ich falsch?


WENN manuelles Speichern die Lösung wäre, könnte man versuchen das Speichern per Makro auszulösen, ungefähr so:

Code: Alles auswählen

Dim ts As Long
Dim ta As Long

Sub Intervall
	ts = Timer()
	Do
		ta = Timer()
		If (ta - ts) > 60 Then '1 Minute
			ts = ta
			ThisComponent.Store()
		End If
	Loop
End Sub
Falls das prinzipiell funktioniert bin ich aber nicht sicher ob das in Praxis zuverlässig genug ist.


Gruß
Stephan
Dateianhänge
IntervallSpeichern.ods
(9.14 KiB) 106-mal heruntergeladen
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Freigegebenes Dokument aktualisieren

Beitrag von Stephan »

und dementsprechend kann dort auch nicht manuell aktualisiert werden
schön, ich habe falsch formuliert ... richtig muss es heißen:
'WEIL manuelles Speichern als Lösung zu funktionieren scheint, könnte man versuchen stattdessen das Speichern per Makro auszulösen ...'

Gleichzeitig musst Du das selbst testen, weil ich Dir hier 'vom grünen Tisch aus' nicht sagen kann ob es unter Deinen Rahmenbedingungen funktionieren wird.
Das das Auto-Speichern mittels der entsprechenden Einstellung unter Extras-... bei Dir nicht funktioniert bin ich mir bewusst, das heißt aber nicht das deshalb das Speichern per Makro auch nicht funktioniert.


Gruß
Stephan
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Freigegebenes Dokument aktualisieren

Beitrag von Hiker »

MW123 hat geschrieben: Mo, 11.05.2020 10:45 Nun möchte ich einen reinen Bildschirm aufhängen an dem die Kollegen diesen "Wochenplan" sehen können.

An diesem Bildschirm soll also eigentlich nichts eingetragen werde und dementsprechend kann dort auch nicht manuell aktualisiert werden.
Hallo,

dann müsstest Du Stephans Makro an das Ereignis Öffnen des Dokuments binden, womit die Aktualisierung klappen sollte.
Da es aber ein freigegebenes Dokument ist, würde dies Macro auch auf allen anderen freigegebenen Instanzen laufen, was eventuell nicht erwünscht ist.
Man müsste dann die Routine einschränken, dass Sie nur bei einem bestimmten Benutzernamen aktiv wird und bei den anderen direkt - ohne Speichern - zurückkehrt.

Mfg, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Freigegebenes Dokument aktualisieren

Beitrag von Stephan »

dann müsstest Du Stephans Makro an das Ereignis Öffnen des Dokuments binden, womit die Aktualisierung klappen sollte.
Und das ist in der angehängten Testdatei bereits umgesetzt, ebenso wie das richtige Beenden des Makros bei Schließen der Datei.
Einzig sollte das der Anwender, unter seinen konkreten Rahmenbedingungen, selbst testen, weil ich glaube es kommt auch auf diese Rahmenbedingungen an und weil ich mich zunächst blind auf die Aussage des Anwenders verließ das Speichern die Lösung wäre.

Ein kurzer Test würde all das klären und deshalb bat ich den FRager darum das zu tun.



Gruß
Stephan
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Freigegebenes Dokument aktualisieren

Beitrag von Hiker »

Stephan hat geschrieben: Mi, 13.05.2020 04:16 Ein kurzer Test würde all das klären und deshalb bat ich den FRager darum das zu tun.
Da der Fragesteller sich nicht mehr meldet habe ich Deine Datei jetzt mal
auf zwei Windows-Rechnern ausprobiert - leider hat das mit dem Macro nicht geklappt.

Die Datei lag auf einem derr beiden Rechner in einem im LAN freigegebenen Ordner (smb-share).
Ich habe Sie auf dem ersten Rechner gestartet und die Office-interne Freigabe Extras->Freigeben aktiviert.
Danach dann das Dokument auf dem zweiten Rechner geöffnet - statt einer Lock-Datei gibt es
dann übrigens eine sharing-Datei.
Egal ob das Makro nur auf einem der beiden Rechner oder auf beiden Rechnern lief,
es gab einen allgemeinen E/A-Fehler und einen verzögerten Abbruch des Basic-Macros beim Store-Befehl.

Ich habe dann nochmal auf beiden rechnern die Macro-Ausführung unterbunden und kontrolliert,
ob es bei "manuellem Sperichern" vie Schaltfläche klappt und hier
funktioniert alles wie dokumentiert: Sobald man speichert wird synchronisiert,
d.h. gespeichert, Änderungen vom zweiten Rechner eingespielt
und bei Änderungen in derselben Zelle kommt ein Dialog, der Abfragt, welche Version man übernehmen will.

Die Frage wäre jetzt, was beim Betätigen der Speichern-Schaltfläche anders läuft als bei Store() von BASIC aus.
Eventuell könnte man dies dann auch von BASIC aus ansprechen.
Als einzige direkt Idee wäre bei mir es mit einem aufgezeichneten Makro zum Speichern zu versuchen.
Mal sehen, ob ich am Wochenende Zeit dafür finde.

Mfg, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Freigegebenes Dokument aktualisieren

Beitrag von Stephan »

Die Frage wäre jetzt, was beim Betätigen der Speichern-Schaltfläche anders läuft als bei Store() von BASIC aus.
Die Speichern-Schaltfläche führt den entsprechenden dispatch-Befehl aus, welcher mehr tut als nur Speichern (z.B. wird geprüft das die Datei überhaupt schon gespeichert ist und bei Notwendigkeit ein Dateidialog eingeblendet).
In Basic also:

Code: Alles auswählen

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
end sub
Außer der allgemeinen Aussage "welcher mehr tut" und dem Beispiel kann ich die Frage was anders läuft aber auch nicht völlig erschöpfend beantworten.
Technisch sind, meines Wissens, die dispatch-Befehle aber auch ganz unabhängig von StarBasic implementiert, was aber umgekehrt auch heißt das es keine Garantie gibt das sich jeder dispatch-Befehl exakt mittel nativem StarBasic nachbilden lässt. Beispielsweise ist ist es mit nativem StarBasic unmöglich wenn nur ein Dokument geöffnet ist und keine sonstigen Fenster (z.B. Basic-IDE) existieren, das Dokument, auf direktem Wege, so zu schließen das die Start-Seite von OO geöffnet bleibt, denn:

Code: Alles auswählen

Sub schliessen()
ThisComponent.Close(True)
End Sub
schließt unter diesen Rahmenbedingungen die komplette Anwendung. Hingegen ließe sich mittels dispatch-Befehl das Dokumentfenster schliessen ohne die komplette Anwendung zu schliessen:

Code: Alles auswählen

Sub schliessen()
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:CloseDoc", "", 0, Array())
End Sub


Gruß
Stephan
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Freigegebenes Dokument aktualisieren

Beitrag von Hiker »

Hallo,

ich habe das Ganze nochmal (kurz) ausprobiert indem ich
die Datei von Stephan mit dem Speichern via dispatch erweitert habe,
s Anhang
IntervallSpeichern2.ods
(10.54 KiB) 95-mal heruntergeladen
Als erstes habe ich die Datei auf dem ersten Rechner gestartet, Macros erlaubt und
die Datei freigegeben, dann vom 2. Rechner dieselbe Datei geöffnet,
allerdings ohne Macros zu erlauben und habe dort etwas geändert und gespeichert.

Rechner1 (mit Macro) lieferte als erstes Mal einen allgemeinen Ein-Ausgabe-Fehler,
nachdem Anwählen von OK kam aber die Meldung, daß die freigegebene Datei aktualisiert wurde
und die Daten erschienen korrekt (mit einem roten Rahmen, der auf Fremdänderungen hinwies).
Dem Threadersteller nützt das trotzdem nichts: da jede Änderung mit einer Dialogbox gemeldet wird,
die mit OK bestätigt werden muß, also nichts für den reinen Anzeigemonitor.

Die weiteren Versuche das Macro auf beiden Rechnern laufen zu lassen wurden dadurch verhindert,
daß beim erneuten Aufruf jetz immer der Hinweis auf "schon geöffnet -> Schreibschutz oder Arbeitskopie"
kam.
Wenn ich die ursprünglich freigegebene Datei kopiere, ist übrigens auch die Kopie für
andere Anwender freigegeben, es gab mit der Kopie aber dasselbe "schon geöffnet"-Problem,
so daß ich das erstmal unter Zeitverschwendung abgelegt habe.

Fazit: Macro funktioniert grundsätzlich via dispatch, das System wirkt bei mir eher fragil und
fehleranfällig und für das eigentliche Problem bräuchte man noch eine "Silent"-option.

mfg, Jörn.
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Antworten