Как мы можем использовать iter_rows() в пакете openpyxl Python?

Я использую openpyxl пакет в Python(Canopy) использовать файлы Excel. У нас есть этот учебник по этой ссылке: ССЫЛКА

you can also use the openpyxl.worksheet.Worksheet.iter_rows() method:

>>> tuple(ws.iter_rows('A1:C2'))
((<Cell Sheet1.A1>, <Cell Sheet1.B1>, <Cell Sheet1.C1>),
 (<Cell Sheet1.A2>, <Cell Sheet1.B2>, <Cell Sheet1.C2>))

>>> for row in ws.iter_rows('A1:C2'):
...        for cell in row:
...            print cell
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>

Как мы можем импортировать openpyxl.worksheet.Worksheet.iter_rows() метод в питоне? Я использовал этот код:

import openpyxl as op
ms = op.load_workbook('mtest.xlsx')

ws = ms.active

op.worksheet.Worksheet.iter_rows()

Этот код возвращает:

type object 'Worksheet' has no attribute 'iter_rows' 

В чем проблема?

1 ответ

Решение

Как показано в руководстве, вам нужно вызвать iter_rows метод на экземпляре листа, например:

>>> for row in ws.iter_rows('A1:C2'):
...        for cell in row:
...            print cell

или же

>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
...    for cell in row:
...        print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>

Как говорится в сообщении об ошибке, вы вызываете его на Worksheet тип, который не будет работать; это должно быть вызвано на объекте:

op.worksheet.Worksheet.iter_rows()  # wrong

Смотрите также этот пример в другом ответе.

Для более старых версий openpyxl может потребоваться включить итераторы при загрузке книги - см. Эту ветку. Это не требуется для более поздних версий.

Вот полный пример, который я только что протестировал в Python REPL (с openpyxl 1.8.3):

>>> import openpyxl as op
>>> wb = op.load_workbook('/tmp/test.xlsx', use_iterators=True)
>>> ws = wb.active
>>> for row in ws.iter_rows():
...   for cell in row:
...     print cell
... 
RawCell(row=1, column='A', coordinate='A1', internal_value=1.0, data_type='n', style_id='0', number_format='general')
RawCell(row=1, column='B', coordinate='B1', internal_value=10.0, data_type='n', style_id='0', number_format='general')
...
Другие вопросы по тегам