Openpyxl: Как устранить ошибку неподдерживаемого операнда .iter_cols

#python #excel #pandas #openpyxl

Вопрос:

У меня возникла проблема с получением значений ячеек нескольких столбцов в определенных строках из двух разных листов. Я пытаюсь выполнить итерацию по первому столбцу двух листов, которые содержат неупорядоченные значения ключей. Как только я перебираю все значения ключей и нахожу расположение ячеек с соответствующими значениями в двух листах, я вызываю свою функцию def column_name для перебора диапазона столбцов для этого конкретного значения ключа(ячейка строки передается в качестве параметра в мою функцию; указывается UniqueID). [m1 и worksh1] и [m2 и worksh2] представляют листы в рабочей книге. Если кто-нибудь может помочь мне устранить следующую ошибку, я был бы очень признателен. Эта ошибка появляется в первой строке моей функции column_name. for col_cells in workbk1.iter_cols(min_row=uniqueID,max_row=uniqueID,min_col=start,max_col=last):

Ошибка: >Файл C:…Python39пакеты сайтов…openpyxlworksheetworksheet.py, строка 516, в _cells_by_col для строки в диапазоне(min_row, max_row 1). Ошибка типа: неподдерживаемые типы операндов для : «Ячейка» и «int»

  
def column_name(workbk1, workbk2, uniqueID):
 for col_cells in workbk1.iter_cols(min_row=uniqueID,max_row=uniqueID,min_col=start,max_col=last):
       for cell in col_cells:
            for col_cells2 in workbk2.iter_cols(min_row=uniqueID,max_row=uniqueID,min_col=start2,max_col=last2):
                 for cell2 in col_cells2:
                    [execute code]


 

Комментарии:

1. Пожалуйста, покажите всю обратную связь. Мы не можем сказать, какая из ваших строк кода вызвала это. Откуда взялось «начало» и «конец»?

2. Спасибо тебе, Тим! Я отредактировал свою операцию с полной обратной связью и дополнительным кодом. «начало» и «конец» — это индексы столбцов для диапазона столбцов, который я хотел бы просмотреть.

Ответ №1:

В column_name функции последним аргументом является uniqueID то, что передается в min_row и max_row . Это означает, что значение unqiueID должно быть целым числом. Но при вызове функции она вызывается как column_name(m1,m2,cell) там, где мы передаем фактический cell объект как uniqueID .

Позже в openpyxl , когда он попытается max_row 1 , произойдет сбой со следующей ошибкой, потому max_row что на самом деле Cell :

 TypeError: unsupported operand type(s) for  : 'Cell' and 'int'
 

Комментарии:

1. Ах, теперь я понимаю, в чем проблема. Спасибо, что указали на это! Можно ли это решить, заменив ячейку на column_name(m1,m2,cell.row) instead, чтобы получить целое значение индекса строки? Или вы знаете другое решение?

2. Извините, я не проанализировал код настолько глубоко, чтобы понять, что uniqueId есть или должно быть и т. Д. Я только что указал на ошибку, чтобы вы могли двигаться вперед.