web-dev-qa-db-fra.com

Openpyxl Comment obtenir une ligne d'une feuille de calcul par index

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

10
Damilola Boiyelove

J'ai finalement trouvé la réponse dans la documentation:

first_row = worksheet[1]
# worksheet[row_index_from_1]

Cela a fonctionné pour moi.

22
Damilola Boiyelove

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

12
Manuel Alvarez