En utilisant Openpyxl et python3.5, j'ai essayé d'obtenir la première ligne d'une feuille de calcul Excel en utilisant un indice mais j'ai une erreur.
# after getting filename
# after loading worksheet
# to get the first row of the worksheet
first_row = worksheet.rows[0]
# I get
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
first_row = phc_th_sheet.rows[1]
TypeError: 'generator' object is not subscriptable
En ce qui concerne l'obtention de la première ligne, j'ai également essayé first_row = worksheet. (Row = 1) # and first_row = worksheet.rows [: 1]
Aucun n'a fonctionné. Des suggestions ou la fonctionnalité n'est-elle pas disponible dans openpyxl? Je suis allé à la documentation sur https://openpyxl.readthedocs.io/en/default/ mais je n'ai rien trouvé d'assez utile pour indexer et sélectionner des lignes
J'ai finalement trouvé la réponse dans la documentation:
first_row = worksheet[1]
# worksheet[row_index_from_1]
Cela a fonctionné pour moi.
L'erreur TypeError: 'generator' object is not subscriptable
. Signifie que vous essayez d'accéder par index à un générateur, qui n'en a pas, car il crée les éléments que vous parcourez.
Vous pouvez le résoudre facilement, le cast dans une liste pour obtenir l'élément que vous souhaitez:
first_row = list(worksheet.rows)[0]
ou itérer sur les lignes:
for row in worksheet.rows:
foo(row)
En effet, même si les deux sont des itérables, les listes et les générateurs peuvent se comporter très différemment, vous pouvez mieux l'expliquer ici:
https://wiki.python.org/moin/Generators
https://docs.python.org/3/library/stdtypes.html#iterator-types
https://docs.python.org/3/library/stdtypes.html#sequence-types-list-Tuple-range