CellRangeByName() mehrere Bereiche?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: CellRangeByName() mehrere Bereiche?

Re: CellRangeByName() mehrere Bereiche?

von clag » Fr, 15.05.2015 20:42

Hallo Axel Richter,

besten Dank für dein Beispiel.
Habe deinen Vierzeiler mal gegen die simple loop variante geprüft, arbeiten beide soweit gut.
Es ist aber kein Zeitvorteil für eine der Varianten feststellbar 250 Loops ~ 7Sekunden

Re: CellRangeByName() mehrere Bereiche?

von Axel Richter » Do, 14.05.2015 06:42

Hallo Clag,

ein Einzeiler geht nicht. Ich bezweifle auch, dass das jemals funktioniert hat, denn getCellRangeByName hat immer schon nur *ein* CellRange zurückgegeben.

Hier ein 4-Zeiler ;-)

Code: Alles auswählen

Sub Main

 oSheet = ThisComponent.Sheets(2)
 
 aCellNames = Array("A1", "B2", "C3")  
 for each oCell in ThisComponent.Sheets.getCellRangesByName(oSheet.Name & "." & Join(aCellNames, ";" & oSheet.Name & "."))
  oCell.CellBackColor = RGB(255,0,0)
 next

End Sub
viele Grüße

Axel

Re: CellRangeByName() mehrere Bereiche?

von clag » Mi, 13.05.2015 18:19

Hallo TrueColor,

Danke für deinen erneuten Test.
Dann muss es wohl spezielle Bedingungen geben, unter denen es so als "kurzer Einzeiler" funktioniert/ bzw. mal funktioniert hat.

OK ist damit ist es abgehakt.

Re: CellRangeByName() mehrere Bereiche?

von TrueColor » Mi, 13.05.2015 17:59

OOo300m15: negativ, nur die erste Zelle wird eingefärbt

Re: CellRangeByName() mehrere Bereiche?

von TrueColor » Mi, 13.05.2015 14:17

clag hat geschrieben: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?

Code: Alles auswählen

oSheet.getCellRangeByName("A3","B6","F8","G12").CellBackColor = rgb(254,0,0)
AOO401m5: negativ, wird nur die erste Zelle gefärbt.

Wenn ich dran denke, kann ich heute abend nochmal zu Hause testen.
Dateianhänge
Unbenannt 1.ods
zum testen...
(11.39 KiB) 144-mal heruntergeladen

Re: CellRangeByName() mehrere Bereiche?

von clag » Mi, 13.05.2015 14:06

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.

Re: CellRangeByName() mehrere Bereiche?

von Karolus » Mi, 13.05.2015 07:51

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?

von clag » Mi, 13.05.2015 06:13

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?

von F3K Total » Di, 12.05.2015 20:51

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?

von balu » Di, 12.05.2015 20:34

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?

von clag » Di, 12.05.2015 18:50

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?

von Axel Richter » Di, 12.05.2015 17:13

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?

von balu » Di, 12.05.2015 14:44

@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?

von TrueColor » Di, 12.05.2015 14:15

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?

von Karolus » Di, 12.05.2015 13:42

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?

Nach oben