web-dev-qa-db-ja.com

Openpyxlインデックスによってワークシートから行を取得する方法

Openpyxlとpython3.5を使用して、添え字を使用してExcelワークシートから最初の行を取得しようとしましたが、エラーが発生しました。

# 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

最初の行の取得に関連して、first_row = worksheet。(row = 1)#およびfirst_row = worksheet.rows [:1]も試しました。

うまくいきませんでした。 openpyxlで提案や機能は利用できませんか? https://openpyxl.readthedocs.io/en/default/ のドキュメントにアクセスしましたが、行のインデックス付けと選択に役立つ情報は何も見つかりませんでした

10

私は最終的にドキュメントで答えを見つけました:

first_row = worksheet[1]
# worksheet[row_index_from_1]

これは私のために働いた。

22

エラー TypeError: 'generator' object is not subscriptable。インデックスを使用してジェネレーターにアクセスしようとしていることを意味します。

簡単に解決でき、リストにキャストして目的の要素を取得できます。

first_row = list(worksheet.rows)[0]

または行を考えて繰り返します:

for row in worksheet.rows:
    foo(row)

これは、両方が反復可能であっても、リストとジェネレーターの動作がまったく異なる場合でも、ここでより適切に説明できるためです。

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