[Calc] Utilisation de UniqueCellFormatRanges

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

[Calc] Utilisation de UniqueCellFormatRanges

Message 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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...