# exemple de macro python pour libreoffice # macro en : C:\Users\\AppData\Roaming\LibreOffice\4\user\Scripts\python\classement.py # Outils/Macros/Gérer les Macros/Python Mes Macros/classement exécuter test_classement # testé avec Libreoffice 5.1 sous WINDOWS 7 # J.P mai 2016 # class Commune(): "Enregistre des proprietes" def __init__(self, nom,place): self.nom = nom self.place = place self.couleur = self.calcCouleur() def calcCouleur(self): if self.place <= 4: couleur = 0x000000 # noir elif 4 < self.place < 10: couleur = 0xff8080 # rouge elif 9 < self.place < 15: couleur = 0xffff80 # jaune elif self.place > 14: couleur = 0x80ff80 # vert else: couleur = 0xffffff # blanc return couleur def colore_zone(mesCommunes): desktop = XSCRIPTCONTEXT.getDesktop() calc = desktop.getCurrentComponent() sheet = calc.getSheets().getByIndex(0) #1ere feuille du classeur Page = sheet.DrawPage for i in range(0,Page.Count): oShape = Page.getByIndex(i) if oShape.ShapeType == "com.sun.star.drawing.ClosedBezierShape": for j in range(0,len(mesCommunes)): if oShape.Name == mesCommunes[j].nom: oShape.FillColor = mesCommunes[j].couleur if oShape.FillColor == 0: oShape.FillColor = 0xc080ff break def test_classement(*args): """on Balaie les communes,on les trie, on les écrit ailleurs""" #get the doc from the scripting context which is made available to all scripts desktop = XSCRIPTCONTEXT.getDesktop() calc = desktop.getCurrentComponent() sheet = calc.getSheets().getByIndex(0) #1ere feuille du classeur # on balaie les lignes pour tester les Communes mesCommunes = [] for i in range(4,46): # nom en colonne A (0) nom = sheet.getCellByPosition(0, i).getString() # place en colonne M (12) place = sheet.getCellByPosition(12, i).Value if place>0: mesCommunes.append(Commune(nom,place)) # on trie le tableau de communes en fonction de la place mesCommunes.sort(key=lambda Commune: Commune.place) colore_zone(mesCommunes) # on écrit les communes triées par place en colonne X for i in range(0,len(mesCommunes)): cell = sheet.getCellByPosition(40, i+4) cell.String = mesCommunes[i].nom # place en W si on veut #sheet.getCellByPosition(39, i).Value = mesCommunes[i].place cell.CellBackColor = mesCommunes[i].couleur return None