Zwischen Calc-Komponenten (Tabellen/Dateien) wechseln/springen

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

Moderator: Moderatoren

FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

Zwischen Calc-Komponenten (Tabellen/Dateien) wechseln/springen

Beitrag von FraWie »

Verzweifle an folgendem Makro-Programier-Problem:

Es gibt zwei bereits geöffnete Dateien z.B.

Kunden.ods ---> Das sei mal die oDoc1
Lieferanten.ods ---> Das sei mal die oDoc2


Mit

oDoc = ThisComponent

kann ich mir immer nur die ZULETZT AKTIVE Komponente auslesen.

Wie komme ich denn an die jeweils andere Komponente ran?

Ich benötige die "ThisComponent" ALLER GEÖFFNETEN Dateien.

Es geht nicht um das Auslesen aller geöffneten Frames.
Das bekomme ich hin. Ich kann auch darin schreiben und kopieren usw.

Ich schaffe es aber nicht, zwischen den Komponenten hin und
her zu schalten.

Habe alles probiert - mit ".toFront" ".focus" usw usf.

Gefühlt 200-Tausend Foreneinträge und Programier-PDFs gelesen.

HILFE :-)

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

Re: Zwischen Calc-Komponenten (Tabellen/Dateien) wechseln/springen

Beitrag von Stephan »

Wie komme ich denn an die jeweils andere Komponente ran?
Indem Du durch alle existenten Komponenten interierst und überprüfst welche die gesuchte Komponente ist. Wenn es um Dokumente ginge z.B. anhand deren .URL-Eigenschaft.
Ich benötige die "ThisComponent" ALLER GEÖFFNETEN Dateien.
Das gibt es nicht, da ja das gilt was Du bereits selbst herausgefunden hast:
kann ich mir immer nur die ZULETZT AKTIVE Komponente auslesen.
d.h. ThisComponent liefert immer nur ein konkretes Dokument-Objekt. Natürlich kannst Du trotzdem mehrere Dokumentobjekte gleichzeitige referenzieren, nur nicht über ThisComponnt.
Es geht nicht um das Auslesen aller geöffneten Frames.
Das bekomme ich hin. Ich kann auch darin schreiben und kopieren usw.

Ich schaffe es aber nicht, zwischen den Komponenten hin und
her zu schalten.
Zumindest ich weiß nicht wie man ohne Zugriff auf die geöffneten Frames den Fokus zwischen den unterschiedlichen Dokumenten/Fenstern verschieben kann, denn zwar kann man auf die Dokumentobjekte auch über die .Components-Auflistung zugreifen, nur bekommen dadurch die Dokumentobjekte nicht den Fokus.
Wie auch immer, mit Hilfe der Frames geht es z.B. so:

Code: Alles auswählen

Sub Main
   Desktop = createUnoService( "com.sun.star.frame.Desktop" ) 
   for i=0 to Desktop.getFrames().getCount() - 1 
      MsgBox "Schalte Fokus um auf:" & CHR(13) & Desktop.getFrames().getByIndex(i).Title
      Desktop.getFrames().getByIndex(i).Containerwindow.ToFront
   Next 
End Sub

Gruß
Stephan
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

Re: Zwischen Calc-Komponenten (Tabellen/Dateien) wechseln/springen

Beitrag von FraWie »

Vielen Dank für die schnelle Antwort.

Werde ich gleich morgen ausprobieren und hoffentlich Erfolg melden...
😀
Gruß
Frank
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

Re: Zwischen Calc-Komponenten (Tabellen/Dateien) wechseln/springen

Beitrag von FraWie »

Perfekt - funktioniert!
Vielen lieben Dank!!!

Du begibst Dich auf die Dektop-Ebene.
Ich war vermutlich - nicht zuletzt auch dank XRAY - immer nur auf
der "Ursprungsobjekt-Ebene".

z.B.:
Odoc.currentcontroller.frame.containerwindow.toFront


Ist logisch, wenn man es weiss... Aber, wie kommt man darauf:

...Desktop.getFrames().getCount() - 1
...
Desktop.getFrames().getByIndex(i).Title
Desktop.getFrames().getByIndex(i).Containerwindow.ToFront
...


---> Gibt es eine Dokumentation oder ein gutes Buch, welches einem das lehrt?
Was ich im Internet finde, bringt mich nicht weiter sondern
treibt mich häufig in den Wahnsinn...:

Problematisch ist auch die uneinheitliche Verwendung der Nomenklatur - Beispiel:

https://wiki.openoffice.org schreibt zum Beispiel:
"StarDesktop und ThisComponent sind OpenOffice.org-Basic-Befehle, die sich auf die Applikation bzw. das aktuell aktive Dokument beziehen.
Im Unterschied zu Microsoft Office ist OpenOffice.org eine Anwendung mit unterschiedlichen Komponenten"
Das Wort "Komponente" ist anderswo aber für geöffnete Dateien reserviert (z.B. "test.ods"), und da gehört der
Desktop doch wohl nicht dazu...?!?

Das verwirrt alles sehr, wenn man unbedarft ist, wie ich es bin....

:-)
Antworten