CellRangeByName() mehrere Bereiche?

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

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

CellRangeByName() mehrere Bereiche?

Beitrag von clag »

Hallo Kenner und Könner,

versuche gerade bis jetzt leider erfolglos mit

Code: Alles auswählen

oSheet.getCellRangeByName("A3","B6","F8","G12").CellBackColor = rgb(254,0,0) 
mehrere Zellen bzw Bereiche in einem Rutsch zu formatieren.
Es gelingt mir micht, es wird immer nur der erste Bereich angesprochen.

Wieso werden nicht alle Zellen entsprechend formatiert?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: CellRangeByName() mehrere Bereiche?

Beitrag von TrueColor »

Hallo clag,

http://www.openoffice.org/api/docs/comm ... angeByName

kann wohl nur 1 String aufnehmen,

Lösung:

Code: Alles auswählen

Sub MultiCellFormating_array

    Dim aRanges(1 to 4) as String

    aRanges(1) = "A3"
    aRanges(2) = "B6"
    aRanges(3) = "F8"
    aRanges(4) = "G12"

    oSheet = ThisComponent.CurrentController.ActiveSheet

    for i = 1 to 4
        oSheet.getCellRangeByName(aRanges(i)).CellBackColor = rgb(254,0,0)
    next i

End Sub
System:
LibO 6 + LibO 7
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: CellRangeByName() mehrere Bereiche?

Beitrag von clag »

Hallo TrueColor,

oh! :-o
dann hat sich Herr Dannenhöfer in seiner Beschreibung vertan, oder die Eigenschaft hat sich seit dem geändert,
Man kann auch gleichzeitig mehrere Bereiche auswählen. Dann müssen diese nur mit Komma getrennt eingegeben werden.

und Danke für dein Schleifen Beispiel, da bleibt dann wohl nichts anderes übrig!?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: CellRangeByName() mehrere Bereiche?

Beitrag von Karolus »

Hallo

es gibt ``ThisComponent.Sheets.getCellRangesByName("Tabelle1.A1:B1;Tabelle1.A3:B3")``

Benötigt dann die Bezeichnung einschließlich Tabellennamen und mit ;SemiColon getrennt

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: CellRangeByName() mehrere Bereiche?

Beitrag von balu »

Hallo Karolus,
es gibt ``ThisComponent.Sheets.getCellRangesByName("Tabelle1.A1:B1;Tabelle1.A3:B3")``
In welchem Office, OOo/AOO/LO? Und seit welcher Versionsnummer?



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: CellRangeByName() mehrere Bereiche?

Beitrag von Karolus »

Hallo

Ich finde die Methode sowohl in Aoo4.1.1 als auch in allen LO >= 4 , und ich gehe davon aus es die Methode schon gab vor der "Gründung" von LO -- wieso fragst du?
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: CellRangeByName() mehrere Bereiche?

Beitrag von TrueColor »

Code: Alles auswählen

Sub MultiCellFormating_ranges
	
	ThisComponent.Sheets.getCellRangesByName("Tabelle1.A1:B1;Tabelle1.A3:B3").CellBackColor = rgb(254,0,0)

End Sub
bringt bei mir "Objektvariable nicht belegt"

Naja, wenn _ich_ das nicht hinbekomme, muss das noch nichts heißen, ich hab nen Durchblick wie 'ne Bleiplatte :-D
System:
LibO 6 + LibO 7
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: CellRangeByName() mehrere Bereiche?

Beitrag von balu »

@Karolus
wieso fragst du?
Sorry, fehler meinerseits. Hatte an der falschen stelle XRAY angesetzt. Bild

Code: Alles auswählen

oBlatt = ThisComponent.Sheets.GetByName("Tabelle1")
oBlatt.getCellRangesByName("Tabelle1.A3:A6;Tabelle1.B6:B10").CellBackColor = rgb(254,0,0)
xray oBlatt
Da gibt es nicht getCellRangesByName.

Code: Alles auswählen

xray ThisComponent.Sheets ' .getCellRangesByName("Tabelle1.A3:A6;Tabelle1.B6:B10")
Hier ja.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: CellRangeByName() mehrere Bereiche?

Beitrag von Axel Richter »

Hallo,

getCellRangesByName gibt eine Sequenz von CellRanges zurück, siehe https://www.openoffice.org/api/docs/com ... ngesByName

Die Sequenz hat natürlich keine Eigenschaft CellBackColor. Diese Eigenschaft haben nur die einzelnen CellRanges *in* der Sequenz.

Code: Alles auswählen

Sub Main

 oSheets = ThisComponent.Sheets

 oCells = oSheets.getCellRangesByName("A1;B2;C3")
 
 for each oCell in oCells
  oCell.CellBackColor = RGB(0,255,0)
 next

End Sub
viele Grüße

Axel
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: CellRangeByName() mehrere Bereiche?

Beitrag von clag »

Hallo,

hätte ich mal etwas früher hier geschaut, habe mir nen Wolf gesucht

Code: Alles auswählen

dim myRanges as object
myRanges = ThisComponent.Sheets.getCellRangesByName("$Tabelle1.$A$15:$A$17; $Tabelle1.$C15:$C$17")
bis ich jetzt rausgefunden habe (und Axel wusste es schon vorher ;) )

Code: Alles auswählen

myRanges.CellBackColor = &H00CC00
myRanges().CellBackColor = &H00CC00 
geht nicht

Code: Alles auswählen

myRanges(0).CellBackColor = &H00CC00 
das geht !

Aber damit wären wir wieder wie eingangs bei einer Schleife,
also (zurück auf Los) !?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: CellRangeByName() mehrere Bereiche?

Beitrag von balu »

Hallo clag,
Aber damit wären wir wieder wie eingangs bei einer Schleife
Absolut nicht!
Denn deine Eingangsfrage lautete:
Wieso werden nicht alle Zellen entsprechend formatiert?
Nur hat sich bis jetzt keiner richtig dazu geäußert. Und meine Antwort wird dir wohl auch nicht gefallen, oder nicht wirklich weiter helfen.

Code: Alles auswählen

getCellRangeByName("A3","B6","F8","G12")
Ja, man kann wohl mehrere zusammenhängende Bereiche, oder mehrere einzelne Zellen durch Komma getrennt angeben, aber man kann nicht alles gleichzeitig damit machen. Und gleichzeitig kann man damit wohl nicht mehrere Zellen in unterschiedlichen "Bereichen" einfärben. Schnapp dir mal XRAY und schau mal was dort bei den Methoden bei set... steht. Und da steht wohl was über Data, Formula, aber nix mit CellBackColor. Aber vielleicht schaffst Du es ja über *setPropertyToDefault* die Zellen gleichzeitig einzufärben, auch wenn ich nicht daran glaube (habe es aber auch nicht getestet).

Aber wer weiß, vielleicht sagt ja noch jemand anderer was dazu und belehrt mich eines besseren.





Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: CellRangeByName() mehrere Bereiche?

Beitrag von F3K Total »

Hallo zusammen,
so vielleicht?

Code: Alles auswählen

sub SCellranges
    osheet = thiscomponent.sheets(0)
    oR1= osheet.getCellRangeByName("A1:A10").RangeAddress
    oR2= osheet.getCellRangeByName("C2:C11").RangeAddress
    ocellranges = thiscomponent.createInstance("com.sun.star.sheet.SheetCellRanges")
    ocellranges.addRangeAddress(oR1,true)
    ocellranges.addRangeAddress(oR2,true)
    ocellranges.CellBackColor = RGB(255,0,0)
end sub
Gruß R
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: CellRangeByName() mehrere Bereiche?

Beitrag von clag »

Hallo und Moin zusammen,

@Balu
balu hat geschrieben:Absolut nicht!
Denn deine Eingangsfrage lautete:
"Wieso werden nicht alle Zellen entsprechend formatiert?"
nein, Balu, das war nur die Folgefrage die sich aus der Erkenntnis ergab, das

Code: Alles auswählen

oSheet.getCellRangeByName("A3","B6","F8","G12").CellBackColor = rgb(254,0,0)
mehrere Zellen bzw Bereiche in einem Rutsch zu formatieren nicht das erwartete tut, obwohl es von Herr Dannenhöfer
in einer Beschreibung Wie kann man auf Zellbereiche zugreifen mit "getCellRangeByName()" so dargestellt wird.
Entweder er hat sich vertan, die die Eigenschaft hat sich seit dem geändert, oder ich verwende eine falsche Syntax.

Die Frage die im Raum steht ist nach wie vor, wie kann man mit einer Anweisung mehrere Zellen bzw Bereiche formatieren
auch wenn sie anfangs wörtlich nicht so gestellt war. Von daher sehe ich schon ein "zurück auf Start"


@ F3K Total,
Danke, dein Code sieht aufgeräumt aus ist aber doch letztlich auch eine Folge von mehreren Anweisungen.
Also nicht wirklich das Gesuchte

mein derzeitiges Hilfskonstrukt per loop sieht so aus

Code: Alles auswählen

	mCells = Array("A3:B3","F3:H3","L3","A9:B9","K9:M9")
	for i=0 to 4 
	ThisComponent.sheets(0).getCellRangeByName(mCells(i)).CellBackColor = rgb(255,0,0) 
	next
die von Herrn Dannenhöfer dargstellte Version

Code: Alles auswählen

oSheet.getCellRangeByName("A3:B3","F3:H3","L3","A9:B9","K9:M9")
würde wohl intern das gleiche tun, in einer Schleife die verschiedenen Ranges ansprechen,
aber vermutlich doch schneller, wenn es denn tun würde.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: CellRangeByName() mehrere Bereiche?

Beitrag von Karolus »

Hallo

Oder ..getCellRangesByName kombiniert mit F3K Total:

Code: Alles auswählen

doc = XSCRIPTCONTEXT.getDocument() #desktop.CurrentComponent
sheets = doc.Sheets
ranges = sheets.getCellRangesByName("Tabelle1.A1:B1;Tabelle1.A3:B3")
cranges = doc.createInstance("com.sun.star.sheet.SheetCellRanges")
for singlerange in ranges:
    cranges.addRangeAddress(singlerange.RangeAddress, True)
cranges.CellBackColor = int('ee00ee',16)
in Basic wäre es grob `for each singlerange in ranges ... next`
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: CellRangeByName() mehrere Bereiche?

Beitrag von clag »

Hallo zusammen,

habe die Information bekommen vor 4.1.1 habe das mit den mehrfachen Bereichen funktioniert.
hat jemand noch eine etwas ältere OO Version am laufen und kann die Angabe stützen?

Dann ist das Thema durch und man muss eben nach belieben eine der hier aufgeführten
oder eine noch zu erdenkende Ersatzvariante einsetzen.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten