🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Verständnisfrage zum Objektmodell?

Alles zur Programmierung im LibreOffice.
Strunz
Beiträge: 99
Registriert: Fr 9. Sep 2011, 19:51

Verständnisfrage zum Objektmodell?

Beitrag von Strunz » Sa 10. Sep 2011, 11:50

Hallo,

ich habe Fragen zu folgendem Code:

Dim oSheets as Object
Dim oSheet as Object

oSheets = ThisComponent
oSheet = oSheets.getByName("Tabelle2")

Fragen:
Mit ThisComponent greife ich auf das Objekt zu (Objectvariable oSheets), das ist doch so?
Woher weiß man, dass die Methode "getByName()" sich auf die Objectvariable "oSheets" bezieht?
Liefert wohl "OSheets" wieder Objecte zurück?
Wie kann ich das in der "API" herausfinden bzw. mit dem Tool "X-Ray"?

cu
Strunz

komma4
Beiträge: 185
Registriert: Sa 13. Aug 2011, 10:01
Wohnort: Chonburi Thailand Asia
Kontaktdaten:

Re: Verständnisfrage zum Objektmodell?

Beitrag von komma4 » Sa 10. Sep 2011, 12:32

Willkommen im Forum
Strunz hat geschrieben:Wie kann ich das in der "API" herausfinden bzw. mit dem Tool "X-Ray"?
Ja.

Zum Unterschied zwischen ThisComponent und StarDesktop.CurrentComponent, siehe

Worin besteht der Unterschied zwischen thisComponent und CurrentComponent?
oder auch
http://wiki.services.openoffice.org/wik ... he_UNO_API


Viel Erfolg!
Cheers
Winfried
aktuell: openSuse 13.1 mit LO 4.3.7.2
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als Extension)

Strunz
Beiträge: 99
Registriert: Fr 9. Sep 2011, 19:51

Re: Verständnisfrage zum Objektmodell?

Beitrag von Strunz » Sa 10. Sep 2011, 14:26

komma4 hat geschrieben:Willkommen im Forum
Strunz hat geschrieben:Wie kann ich das in der "API" herausfinden bzw. mit dem Tool "X-Ray"?
Ja.

Viel Erfolg!
Wenn ich das XRay-Tool benutze steht nachdem Aufruf (Calc) folgendes:
ScModelObj
wenn ich jetzt die Methoden aufrufe kommt aber nicht "getbyname()"!

Was habe ich falsch gemacht?


Gruss
Strunz

komma4
Beiträge: 185
Registriert: Sa 13. Aug 2011, 10:01
Wohnort: Chonburi Thailand Asia
Kontaktdaten:

Re: Verständnisfrage zum Objektmodell?

Beitrag von komma4 » Sa 10. Sep 2011, 19:10

Strunz hat geschrieben:ScModelObj
wenn ich jetzt die Methoden aufrufe kommt aber nicht "getbyname()"!
Du hast

Code: Alles auswählen

xray ThisComponent
Probiere mal

Code: Alles auswählen

xray ThisComponent.Sheets()
Cheers
Winfried
aktuell: openSuse 13.1 mit LO 4.3.7.2
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als Extension)

Strunz
Beiträge: 99
Registriert: Fr 9. Sep 2011, 19:51

Re: Verständnisfrage zum Objektmodell?

Beitrag von Strunz » Sa 10. Sep 2011, 19:31

komma4 hat geschrieben:
Strunz hat geschrieben:ScModelObj
wenn ich jetzt die Methoden aufrufe kommt aber nicht "getbyname()"!
Du hast

Code: Alles auswählen

xray ThisComponent
Probiere mal

Code: Alles auswählen

xray ThisComponent.Sheets()
Hallo,

danke erstmal!

Woher weißt du das bzw. wo kann ich das nachlesen?

cu
Strunz

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Verständnisfrage zum Objektmodell?

Beitrag von F3K Total » Sa 10. Sep 2011, 19:32

Hallo Strunz,
ich versuche es mal mit meinen "nicht-Informatiker" Worten zu beschreiben.
Mit "thisComponent" greifst Du auf die gesamte Calc Datei zu.
mit "xray thisComponent" wirst Du feststellen, das es dort die "sheets" gibt, das sind die Tabellen der Datei, bei einer jungfreulichen sind es drei, Tabelle1, Tabelle2, Tabelle3, die haben die Indexe 0,1,2.
Auf die Tabellen kannst Du dann mit verschiedenen Methoden zugreifen:
1.)

Code: Alles auswählen

getByName("Tabelle1")
2.)

Code: Alles auswählen

getByIndex(0)
d.h. der Aufruf auf Tabelle1 lautet:

Code: Alles auswählen

thisComponent.sheets.getByIndex(0)
oder

Code: Alles auswählen

thisComponent.sheets.getByName("Tabelle1")
Kurzform:

Code: Alles auswählen

thisComponent.sheets(0)
oder (nur wenn Tabellenname ohne Leerzeichen usw.)

Code: Alles auswählen

thisComponent.sheets.Tabelle1
Wenn Du vorher eigene Objekte dimensionierst
z.B.

Code: Alles auswählen

Dim osheets as Object
'Mehrzahl
und

Code: Alles auswählen

Dim osheet as Object
'Einzahl, dann kannst Du sie so, sinnfällig zuweisen:

Code: Alles auswählen

oSheets=ThisComponent.sheets
osheet=oSheets.getbyIndex(0)
oder

Code: Alles auswählen

osheet=oSheets(0)
oder

Code: Alles auswählen

oSheet=oSheets.getByName("Tabelle1")
oder

Code: Alles auswählen

oSheet=oSheets.Tabelle1
... und in der Tabelle1 gibt es Zellen, auf die Du wieder mit mehreren Methoden zugreifen kannst, z.B.

Code: Alles auswählen

ocell=osheet.getCellByPosition(0,0)' Zelle A1
ocell=osheet.getCellByPosition(2,0)' Zelle C1
ocell=osheet.getCellByPosition(2,2)' Zelle C3
oder

Code: Alles auswählen

ocell=osheet.getCellrangebyName("A1") 'Zelle A1
oder

Code: Alles auswählen

orange=osheet.getCellrangebyName("A1:B4")'Zellen im Rechteck A1 bis B4 also A1, A1, A3 ... B3, B4)
HTH
Gruß R

edit: hatte fälschlicherweise statt "getCellByPosition" "getByPosition" geschrieben.
Zuletzt geändert von F3K Total am Sa 10. Sep 2011, 20:06, insgesamt 1-mal geändert.
Windows 11: AOO, LO Linux Mint: AOO, LO

Strunz
Beiträge: 99
Registriert: Fr 9. Sep 2011, 19:51

Re: Verständnisfrage zum Objektmodell?

Beitrag von Strunz » Sa 10. Sep 2011, 19:59

F3K Total hat geschrieben:Hallo Strunz,
ich versuche es mal mit meinen "nicht-Informatiker" Worten zu beschreiben.
Mit "thisComponent" greifst Du auf die gesamte Calc Datei zu.
mit "xray thisComponent" wirst Du feststellen, das es dort die "sheets" gibt, das sind die Tabellen der Datei, bei einer jungfreulichen sind es drei, Tabelle1, Tabelle2, Tabelle3, die haben die Indexe 0,1,2.
Auf die Tabellen kannst Du dann mit verschiedenen Methoden zugreifen:
1.)

Code: Alles auswählen

getByName("Tabelle1")
2.)

Code: Alles auswählen

getByIndex(0)
d.h. der Aufruf auf Tabelle1 lautet:

Code: Alles auswählen

thisComponent.sheets.getByIndex(0)
Meine Frage zu diesem Codeschnipsel ist: sheets ein Objekt oder eine Eigenschaft?
Warum geht folgender Codeschnipsel nicht:
thisComponent.getByIndex(0)

Code: Alles auswählen

thisComponent.sheets.getByName("Tabelle1")
Kurzform:

Code: Alles auswählen

thisComponent.sheets(0)
oder (nur wenn Tabellenname ohne Leerzeichen usw.)

Code: Alles auswählen

thisComponent.sheets.Tabelle1
Wenn Du vorher eigene Objekte dimensionierst
z.B.

Code: Alles auswählen

Dim osheets as Object
'Mehrzahl
und

Code: Alles auswählen

Dim osheet as Object
'Einzahl, dann kannst Du sie so, sinnfällig zuweisen:

Code: Alles auswählen

oSheets=ThisComponent.sheets
osheet=oSheets.getbyIndex(0)
oder

Code: Alles auswählen

osheet=oSheets(0)
oder

Code: Alles auswählen

oSheet=oSheets.getByName("Tabelle1")
oder

Code: Alles auswählen

oSheet=oSheets.Tabelle1
... und in der Tabelle1 gibt es Zellen, auf die Du wieder mit mehreren Methoden zugreifen kannst, z.B.

Code: Alles auswählen

ocell=osheet.getByPosition(0,0)' Zelle A1
ocell=osheet.getByPosition(2,0)' Zelle C1
ocell=osheet.getByPosition(2,2)' Zelle C3
oder

Code: Alles auswählen

ocell=osheet.getCellrangebyName("A1") 'Zelle A1
oder

Code: Alles auswählen

orange=osheet.getCellrangebyName("A1:B4")'Zellen im Rechteck A1 bis B4 also A1, A1, A3 ... B3, B4)
HTH
Gruß R

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Verständnisfrage zum Objektmodell?

Beitrag von F3K Total » Sa 10. Sep 2011, 20:11

Hallo Strunz,
warum liest Du nicht, was ich geschrieben habe?
sheets ist ein Objekt, und
thisComponent.getByIndex(0) geht nicht, weil unter ThisComponent nix per Index anzusprechen ist!
Erst eine Ebene tiefer, "thisComponent.sheets", kannst Du per Index auf die Tabellen zugreifen, wie ich es eben ausführlich beschrieben habe.

Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Strunz
Beiträge: 99
Registriert: Fr 9. Sep 2011, 19:51

Re: Verständnisfrage zum Objektmodell?

Beitrag von Strunz » Sa 10. Sep 2011, 20:27

F3K Total hat geschrieben:Hallo Strunz,
warum liest Du nicht, was ich geschrieben habe?
sheets ist ein Objekt, und
thisComponent.getByIndex(0) geht nicht, weil unter ThisComponent nix per Index anzusprechen ist!
Erst eine Ebene tiefer, "thisComponent.sheets", kannst Du per Index auf die Tabellen zugreifen, wie ich es eben ausführlich beschrieben habe.

Gruß R
Danke erstmal!

Freelancer
Beiträge: 35
Registriert: Sa 28. Mai 2011, 15:30

Re: Verständnisfrage zum Objektmodell?

Beitrag von Freelancer » Sa 10. Sep 2011, 23:26

Hallo Strunz,

ich versuche es mal mit einer einfachen Beschreibung:

ThisComponent ist das Fundament eines Hauses in dem sich mehrere Zimmer befinden.

Mit

Code: Alles auswählen

xray ThisComponent
betrittst Du das Haus (Dokument).

Im angezeigten xray-Fenster schaltest Du mal zunächst oben die Details aus.

Wenn Du jetzt nach unten scrollst steht neben "Sheets" > "object".
Wenn Du jetzt einen Doppelklick auf "Sheets" machst betrittst Du das Zimmer "Sheets".

Code: Alles auswählen

ThisComponent.sheets
In dem Zimmer Sheets steht ein Schrank mit vielen Türen.
Auf einer Tür steht "ElementNames" die wir mit einem Doppelklick öffnen.
Hinter dieser Tür finden wir ein paar Schubladen mit den Namen der Tabellen die sich in diesem Dokument befinden.

Bei den Schubladen liegt ein Zettel auf dem die Methoden stehen, wie man auf die Tabellen zugreifen kann.

Um den Zettel lesen zu können klickt man oben auf "Methods" und es werden Dir die Möglichkeiten angezeigt. Zum Beispiel "getByName(aName as string) " oder "getByIndex(Index as long)

Zusammengesetzt sieht das dann so aus:

Code: Alles auswählen

ThisComponent.sheets.getbyName("Tabelle1")
Ist es jetzt etwas verständlicher?

Freelancer


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten