Hallo und danke erstmal für die Antworten.
Sorry für die etwas verkorkste Erklärung des Problems. Ich versuchs nochmal anhand eines einfachen Beispiels zu erklären:
Ich habe ein calc-Dokument mit 4 Tabellen:
Sheet1,
Sheet2,
Sheet3 und
Sheet4. Speichert man das Dokument nun mit aktivem
Sheet4 wird bei jedem öffnen Sheet4 aktiviert (Standardverhalten OO-Calc).
Auf jedem Sheet befindet sich eine Schaltfläche, klickt man darauf wird die Sub
jmp2tbl1 ausgeführt.
Das funktioniert, es wird immer
Sheet1 angesprungen! Verwendet man statt ThisComponent CurrentComponent gehts übrigens nicht. NoSuchElement-Fehler
Die sub
initDoc wird bei Ereignis
Ansicht wurde erzeugt / OnViewCreated ausgeführt.
Was genau schlägt fehl?
Dort funktioniert der Sprung in
Sheet1 nicht. Es kommt zu keinem Fehler, der Sprung wird einfach nicht ausgeführt.
Wenn Du nun beim OnViewCreated-Event ein Makro laufen lässt, wird dadurch offensichtlich für diese Zeit die Kommunikation zwischen View und Model unterbrochen.
Änderungen, die Du in dieser Zeit über den Controller machst, sind dahingehend wirkungslos, dass der Controller sich aus dem Model direkt danach die .ViewData holt und die dortigen Einstellungen anwendet.
Scheint so. Das Laden des Dokuments und Erzeugen der Anzeige ist also doch noch nicht fertig.
Interessant ist übrigens wenn man xray aktiviert. In diesem Falle wird dort ja die Makroausführung angehalten. Das calc-Dokument steht dann in
Sheet1 mit Fokus auf Zelle A1 (ThisComponent.CurrentController..ActiveSheet.Name="Sheet1"). Nach Beenden von xray wird dann wieder
Sheet4 angesprungen.
Code: Alles auswählen
public sub initDoc
'DEBUG mit xray
'GlobalScope.BasicLibraries.loadLibrary("XrayTool")
'xray ThisComponent
'xray ThisComponent.CurrentController
jmp2tbl1
end sub
public sub jmp2tbl1
msgbox("Tabelle 1 wird angesprungen.")
ThisComponent.CurrentController.SetActiveSheet(ThisComponent.Sheets.getByName("Sheet1"))
end sub
Jetzt bräuchte ich also entweder einen Event der erst generiert wird wenn wirklich alles fertig geladen und dargestellt ist oder müsste im .ViewData manipulieren.
Laut xray gibts da aber nichts zu manipulieren:
xray thiscomponent.currentcontroller.model.viewdata
Count long 1 pseudo-prop, read-only
Dbg_Methods string <...> basic prop, read-only
Dbg_Properties string <...> basic prop, read-only
Dbg_SupportedInterfaces string <...> basic prop, read-only
ElementType type pseudo-prop, read-only
ImplementationId []byte pseudo-prop, read-only
ImplementationName string <...> pseudo-prop, read-only
SupportedServiceNames []string pseudo-prop, read-only
Types []type pseudo-prop, read-only
Ich hoffe jetzt ists sinnvoller erklärt.
Im Anhang übrigens mal ein Beispiel.
MfG
Hallo und danke erstmal für die Antworten.
Sorry für die etwas verkorkste Erklärung des Problems. Ich versuchs nochmal anhand eines einfachen Beispiels zu erklären:
Ich habe ein calc-Dokument mit 4 Tabellen: [b]Sheet1[/b], [b]Sheet2[/b], [b]Sheet3[/b] und [b]Sheet4[/b]. Speichert man das Dokument nun mit aktivem [b]Sheet4[/b] wird bei jedem öffnen Sheet4 aktiviert (Standardverhalten OO-Calc).
Auf jedem Sheet befindet sich eine Schaltfläche, klickt man darauf wird die Sub [i]jmp2tbl1[/i] ausgeführt.
Das funktioniert, es wird immer [b]Sheet1[/b] angesprungen! Verwendet man statt ThisComponent CurrentComponent gehts übrigens nicht. NoSuchElement-Fehler
Die sub [i]initDoc[/i] wird bei Ereignis [i]Ansicht wurde erzeugt / OnViewCreated[/i] ausgeführt.
[quote]Was genau schlägt fehl?[/quote]
Dort funktioniert der Sprung in [b]Sheet1[/b] nicht. Es kommt zu keinem Fehler, der Sprung wird einfach nicht ausgeführt.
[quote]
Wenn Du nun beim OnViewCreated-Event ein Makro laufen lässt, wird dadurch offensichtlich für diese Zeit die Kommunikation zwischen View und Model unterbrochen.
Änderungen, die Du in dieser Zeit über den Controller machst, sind dahingehend wirkungslos, dass der Controller sich aus dem Model direkt danach die .ViewData holt und die dortigen Einstellungen anwendet.
[/quote]
Scheint so. Das Laden des Dokuments und Erzeugen der Anzeige ist also doch noch nicht fertig.
Interessant ist übrigens wenn man xray aktiviert. In diesem Falle wird dort ja die Makroausführung angehalten. Das calc-Dokument steht dann in [b]Sheet1[/b] mit Fokus auf Zelle A1 (ThisComponent.CurrentController..ActiveSheet.Name="Sheet1"). Nach Beenden von xray wird dann wieder [b]Sheet4[/b] angesprungen.
[code]
public sub initDoc
'DEBUG mit xray
'GlobalScope.BasicLibraries.loadLibrary("XrayTool")
'xray ThisComponent
'xray ThisComponent.CurrentController
jmp2tbl1
end sub
public sub jmp2tbl1
msgbox("Tabelle 1 wird angesprungen.")
ThisComponent.CurrentController.SetActiveSheet(ThisComponent.Sheets.getByName("Sheet1"))
end sub
[/code]
Jetzt bräuchte ich also entweder einen Event der erst generiert wird wenn wirklich alles fertig geladen und dargestellt ist oder müsste im .ViewData manipulieren.
Laut xray gibts da aber nichts zu manipulieren:
xray thiscomponent.currentcontroller.model.viewdata
Count long 1 pseudo-prop, read-only
Dbg_Methods string <...> basic prop, read-only
Dbg_Properties string <...> basic prop, read-only
Dbg_SupportedInterfaces string <...> basic prop, read-only
ElementType type pseudo-prop, read-only
ImplementationId []byte pseudo-prop, read-only
ImplementationName string <...> pseudo-prop, read-only
SupportedServiceNames []string pseudo-prop, read-only
Types []type pseudo-prop, read-only
Ich hoffe jetzt ists sinnvoller erklärt.
Im Anhang übrigens mal ein Beispiel.
MfG
[attachment=0]Neu OpenDocument Tabellendokument.ods[/attachment]