hello,
voilà je cherche à optimiser le code d'une macro python LibreOffice que j'ai fabriquée pour trier des nombres dans des cellules de LibreOffice Calc(je suis Newbie Python donc pas au top au niveau optimisation). Plutôt qu'un long discours voici une copie d'écran de ce que je veux réaliser avec la macro :
![]()
A gauche les données de départ, A droite ce que je veux obtenir ( tri des nombres Résultat par colonne et pas de doublon)
Voici le code qui me permet d'y arriver :
La question est : n'y a-t-il pas moyen d'optimiser la partie tri et génération de la plage de sortie ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 def test_tableau(): desktop = XSCRIPTCONTEXT.getDesktop() calc = desktop.getCurrentComponent() sheet = calc.getSheets().getByIndex(0) a = sheet.getCellRangeByName("A1:G10") # on récupere les data en une seule fois plage = a.getDataArray() # on crée une liste à une dimension à partir de la plage listeNombre = [item for sublist in plage for item in sublist] # on classe par ordre croissant les nombres et on enlève les doublons matrice = sorted(set(listeNombre)) # on recrée la plage à partir de la liste triée sans doublon # en inversant les lignes et les colonnes totallist = [] for i in range(0,10,1): rowlist = [] for j in range(0,7,1): try: rowlist.append(matrice[j*7 +i]) # si matrice[x] n'existe pas on met un élément vide except: rowlist.append('') totallist.append(tuple(rowlist) ) # on définit la plage ou on va écrire b = sheet.getCellRangeByName("I1:O10") # on écrit en une fois la plage résultat b.setDataArray(tuple(totallist)) g_exportedScripts = test_tableau,
Ami calmant, J.P
Partager