Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Je cherche à tirer dans l'ordre croissant puis par ordre alphabétique les feuilles d'un classeurs composé de feuilles. Il s'agirait d'obtenir le tri suivant : 1_Feuille, 2_feuille, 3_Feuille,..., 27_feuille puis une fois que les chiffres sont épuisés : Alpha, Beta
Toutefois comme évoqué dans le sujet, il y a un "bug" au niveau du classement par chiffre croissant, 27 se trouve avant 1
Ajout : Le mystère ressemble de plus en plus à un bogue
Vf = ("a10" > "a2") renvoie True: normal
Mais A = "a10": B = "a2" et Vf = (A > B) renvoie False
Y a t'il un moyen de contourner ce problème pour arriver à mes fins ?
Vous remerciant pour vos avis.
Dernière modification par daru72 le 30 mai 2018 07:01, modifié 1 fois.
Et si vous nommiez vos feuilles
feuille_01, feuille_02, feuille_03 etc ?
AOO 4.1.15 et LibO stable 7.6.6 / macOS Intel 13.6.6 Ventura
Adoptium-temurinJDK-jre_1.8.0_412 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC Tutoriels du forum pour macOS Pour sauvegarder vos documents c'est ceinture ET bretelles
Sub Trier
GlobalScope.BasicLibraries.loadLibrary("Tools")
Dim oSheets As Object, oSheet As Object, i As Integer
Dim aName() As integer, sName As String, j As Integer
oSheets = thisComponent.Sheets
oSheet = ThisComponent.Sheets(0)
ReDim aName(oSheets.Count-1,1) As integer
For i = 0 TO oSheets.Count-1
aName(i,0) = Mid(oSheets(i).Name,8)
aName(i,1) = i
Next i
BubbleSortList(aName)
oSheet.getCellByPosition(0,2).String = "Move"
For i = 0 To oSheets.getCount()-1
oSheets.moveByName("Feuille" & aName(i,0),i)
Next i
End Sub
Et ne pas oublier de le rajouter dans la boucle du déplacement.
Si toutefois mes feuilles ont des noms aléatoires, comment puis je retrouver la partie du nom de l'onglet sans le chiffre ?
L'idée serait dans mon exemple ci joint d'arriver à cet ordre.
import re
def natural_sort(event=None):
doc = XSCRIPTCONTEXT.getDocument()
feuilles = doc.Sheets
noms = list(feuilles.ElementNames)
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
noms.sort(key=alphanum_key)
doc.lockControllers()
try:
for pos, nom in enumerate(noms):
feuilles.moveByName(nom, pos)
finally:
doc.unlockControllers()
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10 AOOo 4.1.x sur Linux Mint LibreOffice 5.x/6.x sur Linux Mint
-- ▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
daru72 a écrit :L'idée serait dans mon exemple ci joint d'arriver à cet ordre.
Sachant qu'un tri se fait alphabétiquement ou numériquement, comment expliques-tu la logique de cette suite ?
Dude, pas vraiment de logique , juste un besoin. J'ai des feuilles plus orientées calcul qui commencent par des chiffres et d'autres de bilans qui commencent par des lettres.