Seite 1 von 2

CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 09:34
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?

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 10:52
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

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 11:12
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!?

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 12:04
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

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 13:32
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

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 13:42
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?

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 14:15
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

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 14:44
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

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 17:13
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

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 18:50
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) !?

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 20:34
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

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Di, 12.05.2015 20:51
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

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Mi, 13.05.2015 06:13
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.

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Mi, 13.05.2015 07:51
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`

Re: CellRangeByName() mehrere Bereiche?

Verfasst: Mi, 13.05.2015 14:06
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.