#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
есть или должно быть и т. Д. Я только что указал на ошибку, чтобы вы могли двигаться вперед.