[gelöst] Range addressieren mit "Tabelle3.A1:c15" ohne Sheet-Object

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

Moderator: Moderatoren

StePfl
**
Beiträge: 45
Registriert: Mo, 04.07.2016 17:16

[gelöst] Range addressieren mit "Tabelle3.A1:c15" ohne Sheet-Object

Beitrag von StePfl » Mi, 14.06.2017 14:18

hallo,
ich suche gerade verzweifelt einen Weg um ein RangeObjekt zu erzeugen, von dem ich nur einen AdressString (z.B. "Tabelle3.A1:c15") habe.
Natürlich kann ich "Tabelle3" aus dem String extrahieren, das passende Sheet suchen, um dann darin den Range zu addressieren.

Ich vermute aber, dass es eine elegantere Möglichkeit dafür gibt, DAS funktioniert jedenfalls (leider) nicht!

Code: Alles auswählen

	sZellAdressenName = "Tabelle.C7:D14"
	hlp1 = thiscomponent.sheets().getcellrangebyname(sZellAdressenName)
Für Tips bin ich sehr dankbar, herzlichen Gruß
StePfl
Zuletzt geändert von StePfl am Do, 15.06.2017 13:02, insgesamt 1-mal geändert.

Benutzeravatar
komma4
********
Beiträge: 5323
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Range addressieren mit "Tabelle3.A1:c15" ohne Sheet-Object

Beitrag von komma4 » Mi, 14.06.2017 15:37

StePfl hat geschrieben:
Mi, 14.06.2017 14:18
vermute aber, dass es eine elegantere Möglichkeit dafür gibt
Ich halte es hier für eleganter:

Code: Alles auswählen

sheet = oSheets.getByName("Tabelle3")
Damit hast Du schon das passende Blatt-Objekt
Cheers
Winfried
aktuell: LO 5.2.5.1 20m0(Build:1) unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)

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

Re: Range addressieren mit "Tabelle3.A1:c15" ohne Sheet-Object

Beitrag von Stephan » Do, 15.06.2017 06:05

z.B.:

Code: Alles auswählen

adr = Split("Tabelle1.C7:D14", ".")
hlp1 = thiscomponent.sheets().getByName(adr(0)).getcellrangebyname(adr(1))
ohne Sheet-Object
mmh, macht eigentlich nur Sinn für das jeweils gerade aktive Blatt:

Code: Alles auswählen

hlp1 = thiscomponent.CurrentController.ActiveSheet.getcellrangebyname("C7:D14")
Gruß
Stephan

StePfl
**
Beiträge: 45
Registriert: Mo, 04.07.2016 17:16

Re: Range addressieren mit "Tabelle3.A1:c15" ohne Sheet-Object

Beitrag von StePfl » Do, 15.06.2017 09:52

vielen Dank für eure Vorschläge!

komma4:
woher bekomme ich "oSheets" wenn ich das gesuchte Sheet-Objekt nicht kenne

Stephan:
dein erster Vorschlag klappt prima!
mmh, macht eigentlich nur Sinn für das jeweils gerade aktive Blatt:
... wenn bei meinem Beispiel "Tabelle" schon das aktive sheet ist, gibt die 2. Zeile keinen Fehler aus.
Nur wenn sich der AdressString auf ein ANDERES Sheet bezieht, gibts Probleme.

Hintergrund:
in einem calc.sheet werden diverse Bezugsadressen - auch auf andere sheets - (als String) ermittelt - mit diesen Bezügen würde ich gerne arbeiten - das geht nun :-)

vielen Dank und ein schönen "HäppyKadaver"
StePfl

Benutzeravatar
komma4
********
Beiträge: 5323
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Range addressieren mit "Tabelle3.A1:c15" ohne Sheet-Object

Beitrag von komma4 » Do, 15.06.2017 11:49

StePfl hat geschrieben:
Do, 15.06.2017 09:52
komma4:
woher bekomme ich "oSheets" wenn ich das gesuchte Sheet-Objekt nicht kenne
Auf gleiche Weise, wie in @Stephans -zugegebenermassen eleganterem- Vorschlag

Code: Alles auswählen

sheets = ThisComponent.getSheets()
Cheers
Winfried
aktuell: LO 5.2.5.1 20m0(Build:1) unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)

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

Re: [gelöst] Range addressieren mit "Tabelle3.A1:c15" ohne Sheet-Object

Beitrag von Stephan » Do, 15.06.2017 14:42

... wenn bei meinem Beispiel "Tabelle" schon das aktive sheet ist, gibt die 2. Zeile keinen Fehler aus.
Nur wenn sich der AdressString auf ein ANDERES Sheet bezieht, gibts Probleme.
ich hatte wohl insgesamt "ohne Sheet-Object" falsch verstanden, denn ich meinte Du wolltest nur nicht explizit auf ein bestimmtes Sheet zugreifen, hingegen war Dein Problem wohl eher das Du sehr wohl auf ein bestimmtes Sheet zugreifen wolltest und nur nicht wusstest wie Du dessen Objekt referenzierst.

wie auch immer ... wenn der erste Code von mir passt dann passt es, sonst musst Du nochmals nachfragen und erklären was Du willst.


Gruß
Stephan

StePfl
**
Beiträge: 45
Registriert: Mo, 04.07.2016 17:16

Re: [gelöst] Range addressieren mit "Tabelle3.A1:c15" ohne Sheet-Object

Beitrag von StePfl » Fr, 16.06.2017 10:20

hallo zusammen,

@komma4: Danke - die Methode "getSheets()" kannte ich bisher noch nicht - wieder etwas gelernt :-)

@Stephan: stimmt, ich finde es auch deshalb interessant, weil ich so in einer Makro-Function/Sub Zellen auch mit einem reinen TextAddressString adressieren kann, ohne explizit das Sheet-Objekt übergeben zu müssen/haben ....

Ergänzung:
Wenn ich in einer Sub (nur) ein "CellObj." habe, und dessen Eigenschaft "AbsoluteName" nutze, kann ich damit (quasi durch die Hintertüre) die VBA-Funkion "parent" (zumindest für das Sheet) nachbilden - SEHR SCHÖN :mrgreen:
siehe meine frühere Frage viewtopic.php?f=18&t=67253&p=264202&hil ... fl#p264202

Es fügt sich Eins zu Anderen ...
immer wieder : VIELEN DANK FÜR EURE ANTWORTEN UND HILFESTELLUNGEN....
herzliche Grüße
Stepfl

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste