Comment utiliser un nom de champ ou de l'en-tête de colonne dans openpyxl?
Voir mon code ci-dessous. Ce code fonctionne très bien, mais je voudrais faire deux choses. Une seule chose est que j'ai fait si la déclaration ou beaucoup plus court que le réel par exemple. J'ai beaucoup de colonnes, comme cela, pas tous les uns à côté des autres. J'aimerais qu'elle soit plus courte. Aussi, parfois, je ne peut pas connaître exactement lettre de colonne.
Je veux donc savoir si il existe un moyen de savoir le nom de la colonne ou d'en-tête. Comme les valeurs qui seraient dans de très haut rang. Donc, je peux tester pour voir si c'est un de ces valeurs de toujours réaliser la fonction de la cellule si elle est dans la colonne spécifiée.
Je ne peux pas trouver openpyxl fonction pour ne nom de la colonne. Vous ne savez pas si il comprend que la première ligne est différent du reste. Je pense que peut-être si pas je peux essayer de faire le test sur la première ligne, mais ne comprends pas comment faire cela.
Donc, il y a un moyen de l'appel nom de la colonne? ou si il n'y a aucun moyen de l'appel nom de la colonne à tester, quelqu'un peut-il m'aider à faire vérifier sur la première ligne pour voir si elle a de la valeur? puis faire le changement sur la ligne correcte je suis? Est-il logique.
Ainsi, au lieu de code en disant:
if cellObj.column == 'H' or ...
Il dirait:
if cellObj.column_header == 'NameOfField or ...
Ou si pas possible de faire ça, alors:
if this cell has column where first row value is 'NameOfField' ...
S'il vous plaît aider avec la meilleure façon de le faire. J'ai regardé sur stackoverflow et dans le livre et le site de blog, mais ne semble pas être un moyen de l'appel nom de la colonne (et non de la lettre de la colonne).
for row in sheet.iter_rows():
for cellObj in row:
if cellObj.column == 'H' or cellObj.column == 'I' or cellObj.column == 'L' or cellObj.column == 'M':
print(cellObj.value),
if cellObj.value.upper() == 'OldValue1':
cellObj.value = 1
print(cellObj.value)
elif cellObj.value.upper() == 'OldValue2':
cellObj.value = 2
print(cellObj.value)
OriginalL'auteur stahna | 2015-12-15
Vous devez vous connecter pour publier un commentaire.
MODIFIER
En supposant que ce sont les noms d'en-tête vous êtes à la recherche pour:
Trouver les indices pour ces colonnes:
Maintenant parcourir le reste des lignes:
Utiliser un dictionnaire au lieu d'un jeu de garder les noms de colonne:
Vieille réponse
Cela rend votre
if
déclaration de la plus courte:Pour le multi lettre de la colonne de coordonnées que vous devez utiliser une liste:
Oh, attendez! Que faire si j'utilise cette syntaxe, mais la colonne est AB, ou AA? Je ne veux pas changer de colonnes A ou B. j'ai essayé de le faire et il se comporte comme je m'attends et semble se confondre si AB signifie que A et B ou une colonne de AB. Donc comme ceci: si cellObj.colonne 'HILMPQTUXYABAC': Mais cela fonctionne encore: si cellObj.colonne 'HILMPQTUXY" ou cellObj.colonne == 'AB' ou cellObj.colonne == 'AC'
FWIW il n'y a aucune garantie que
cell.column
sera autour de la propriété de sorte qu'il est probablement préférable de travailler avecfor cell in row[6:10]:…
Le travail de mise à jour de votre dossier?
J'ai été jouer avec le code que vous avez fournis. Je vous remercie. J'ai toujours du mal à comprendre exactement ce qu'il fait. Comment puis-je l'utiliser pour tester pour savoir quand je suis dans la bonne colonne?
OriginalL'auteur Mike Müller
Vous pouvez accéder à des cellules de la première ligne et de colonne et de l'aide de la feuille.cellule(ligne=#, colonne = #) de la syntaxe. Par exemple:
Énumérer renvoie l'index de l'objet dans la liste, ainsi que la valeur de la liste.
Je suis désolé, je ne le comprends pas. Je ne peux pas le faire fonctionner. J'ai essayé de regarder ici: stackoverflow.com/questions/11427138/... Donc, si je peut faire référence à la valeur dans la première ligne, j'ai besoin de faire de mon cas pour qu'il corresponde '*RtNL" ou "*LftNL". Je ne sais pas d'où votre "j' en passe. Pour tornesi code puis le si doit être "si header_cell == '*RtNL" ?
la regex est ok, je vais essayer plus tard. Je n'ai pas lu encore. Mais comment utiliser le code de référence nom de la colonne dans l'instruction si encore je ne comprends pas.
OriginalL'auteur tornesi