Convertir un fichier excel ou tableur lettre de colonne à son numéro dans Pythonic de la mode
Est-il plus pythonic de convertir excel style des colonnes de chiffres (commençant par 1)?
De travail code à deux lettres:
def column_to_number(c):
"""Return number corresponding to excel-style column."""
number=-25
for l in c:
if not l in string.ascii_letters:
return False
number+=ord(l.upper())-64+25
return number
Code s'exécute:
>>> column_to_number('2')
False
>>> column_to_number('A')
1
>>> column_to_number('AB')
28
Trois lettres qui ne sont pas de travail.
>>> column_to_number('ABA')
54
>>> column_to_number('AAB')
54
Référence: réponse à la question en C#
OriginalL'auteur paragbaxi | 2011-08-31
Vous devez vous connecter pour publier un commentaire.
Il existe un moyen de le rendre plus pythonic (fonctionne avec trois ou plus de trois lettres et utilise moins de numéros de magie):
Et comme un one-liner à l'aide de réduire (ne pas vérifier l'entrée et est moins lisible, donc je ne le recommande pas):
OriginalL'auteur Sylvain
Ici est une façon de le faire. C'est une variation sur le code de la XlsxWriter module:
OriginalL'auteur jmcnamara
À l'aide de openpyxl
OriginalL'auteur Chad
One-liners testé en Python 2.7.1 et 3.5.2
Multi-liners de même
Tous les tests d'impression
OriginalL'auteur devon
Cela devrait le faire, en VBA, ce que vous cherchez:
Vous pouvez l'utiliser comme vous le feriez pour une formule Excel--entrée de la colonne, dans les lettres, comme une chaîne de caractères (par exemple, "AA") et devrait fonctionner indépendamment de la longueur de la colonne.
Votre code pauses lorsque vous traitez avec trois lettres à cause de la façon dont vous êtes en train de faire le décompte--vous devez utiliser la base de 26.
OriginalL'auteur Chris
Après cette lecture, j'ai décidé de trouver un moyen de le faire directement dans les cellules Excel. Elle même des comptes pour les colonnes après Z.
Il suffit de coller cette formule dans une cellule d'une ligne de la colonne et il vous donnera le nombre correspondant.
Le thème ici est de saisir la lettre de la colonne, obtenir le
Code()
de il et soustraire 64, basée sur le fait que le code de caractère ASCII de la lettreA
est de 64.OriginalL'auteur Visicalc Visionary
J'ai fait ce one-liner:
Il fonctionne en parcourant les lettres dans l'ordre inverse et en multipliant par 1, 26, 26 * 26 etc, alors la somme de la liste. Cette méthode est compatible avec plus de chaînes de lettres, de trop.
Je l'appelle avec:
d'impression(colNameToNum("AA")) # 27
ou
d'impression(colNameToNum("XFD")) # le plus haut de la colonne de permis, je crois. Résultat = 16384
OriginalL'auteur dingles
Vous pouvez simplement ajouter la ligne suivante à la console après l'installation de la openpyxl module:
Il suffit de changer les lettres et les chiffres pour répondre à vos besoins ou créer une boucle pour faire le travail pour un projet d'ensemble. J'espère que cette aide. Des acclamations.
OriginalL'auteur Randum
Je ne suis pas sûr de comprendre correctement, voulez-vous de les "traduire" en référence code C# pour python? Si oui, vous étiez sur la bonne voie; il suffit de le modifier afin de:
OriginalL'auteur Joubarc
viens de faire :
appel exemple :
résultat :
OriginalL'auteur sliders_alpha
Coincise et élégant Ruby version:
OriginalL'auteur Iwan B.
Pour les index qui commence à partir de zéro (par exemple A = 0, B = 1, et ainsi de suite):
OriginalL'auteur char101
Vous pouvez utiliser cette oneliner à l'aide de la compréhension et de la chaîne qui est assez facile à utiliser:
OriginalL'auteur Asthmanaut
Voici ce que j'utilise (écrit avant que je trouve cette page):
Et quelques pistes:
OriginalL'auteur Shrikant Sharat