1 pièce(s) jointe(s)
Optimisation de tri de nombres sur plusieurs colonnes par ordre croissant
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 :
Pièce jointe 168150
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 :
Code:
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, |
La question est : n'y a-t-il pas moyen d'optimiser la partie tri et génération de la plage de sortie ?
Ami calmant, J.P