Le service com.sun.star.sheet.CellFormatRanges représente une collection de plages de cellules formatées identiquement. Les cellules à l'intérieur d'une plage de cellules de la collection possèdent les mêmes attributs de formatage. Toutes les cellules de la plage source sont contenues dans l'une des plages. S'il existe une plage non rectangulaire de même format, elle est divisée en plusieurs plages rectangulaires.
Le service com.sun.star.sheet.UniqueCellFormatRanges représente, comme Cell Format Ranges, une collection de plages de cellules formatées identiquement, mais cette collection contient des objets de conteneur de zone de cellule (service com.sun.star.sheet.SheetCellRanges) qui contiennent les plages de cellules. Les cellules de toutes les plages à l'intérieur d'un conteneur de plage de cellules sont formatées identiquement. Les attributs de formatage d'un conteneur de plage diffèrent pour chaque autre conteneur de plage. Toutes les plages formatées identiquement sont regroupées en un seul conteneur.
Dans l'exemple suivant, les cellules ont deux couleurs de fond différentes. Les plages formatées de la plage A1: G3 sont interrogées de la manière décrite Un objet com.sun.star.sheet.CellFormatRanges contient les plages suivantes: A1: C2, D1: G1, D2: F2, G2: G2 et A3: G3.
Un objet com.sun.star.sheet.UniqueCellFormatRanges contient deux collections de plage com.sun.star.sheet.SheetCellRanges. Une collection contient les plages blanches, c'est-à-dire A1: C2, D1: G1, G2: G2 et l'autre collection, les plages de gris, c'est-à-dire D2: F2, A3: G3.
Source : Developper's Guide - Equally Formatted Cell Ranges
Un exemple avec un Hubert_Lambert_Inside :
Code : Tout sélectionner
function sommecouleur(plage as string, cellule as string) as long
MonDocument = ThisComponent
LesFeuilles = MonDocument.Sheets
oPlage = LesFeuilles.getCellRangesByName(plage)
ucfr = oPlage(0).UniqueCellFormatRanges
total = 0
couleur = codecouleur(cellule, feuille)
for each u in ucfr
if u.CellBackColor = couleur then
total = total+u.computeFunction(com.sun.star.sheet.GeneralFunction.COUNT)
end if
next u
sommecouleur = total
End function
function codecouleur(cellule as string) as long
MonDocument = ThisComponent
maFeuille = monDocument.currentController.ActiveSheet
codecouleur = maFeuille.getCellRangeByName(cellule).CellBackColor
end function