Page 1 sur 1

[Calc] Utilisation de UniqueCellFormatRanges

Publié : 29 nov. 2016 14:45
par Churay
Il est possible d'obtenir des collections de toutes les plages de cellules formatées de manière identique contenues dans une plage de cellules source.

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
UniqueCellFormatRanges.PNG
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
et le fichier qui va avec