#python #excel #loops #for-loop #nested-loops
#python #excel #циклы #for-цикл #вложенные циклы
Вопрос:
В настоящее время я пишу фрагмент кода, который перебирает строки и столбцы электронной таблицы, а затем использует значение ячейки в строке r
и столбце c
в параметре функции. В настоящее время у меня это работает следующим образом:
for i in range (1, ws.max_row 1):
first_column = worksheet.cell(i,1).value
second_column = worksheet.cell(i,2).value
third_column = worksheet.cell(i,3).value
result = functionX.create(first_column, second_column, third_column)
Где индекс i
перебирает строки на листе. Я использую worksheet.cell(row,column).value
функцию из openpyxl
библиотеки и сохраняю их в x_column
переменных. Позже эти переменные используются в качестве параметров в class.create()
функции в том же цикле for.
Однако то, что я хотел бы сделать, это также отслеживать столбцы в цикле с отдельным индексом. Причина этого в том, что я хотел бы распечатать сообщение пользователю, когда он обнаружил пустую ячейку в строке i
и столбце j
.
В качестве решения я подумал, что было бы полезно использовать вложенный цикл for для отслеживания столбцов:
for i in range (1, ws.max_row 1):
for j in range (1,4):
first_column = worksheet.cell(i,j).value
second_column = worksheet.cell(i,j).value
third_column = worksheet.cell(i,j).value
result = functionX.create(first_column, second_column, third_column)
Однако это, очевидно, не приведет к увеличению индекса j
в пределах одной и той же итерации второго цикла. Есть идеи, как это решить?
Комментарии:
1. Пожалуйста, отформатируйте свой код. Python очень чувствителен к отступам, как и программисты на python.
2. @quamrana Готово! 🙂
3. @Graipher был просто абстракцией, но отредактирован в любом случае
Ответ №1:
Если вы действительно хотите использовать цикл for для столбцов, вы могли бы использовать список для преобразования значений ячеек, а затем распаковать этот список, чтобы передать преобразованные значения в метод .create()
.
Это также гибко, если вы хотите добавить больше столбцов без изменения большого количества кода, просто увеличьте диапазон второго цикла.
Это может выглядеть так:
for i in range (1, ws.max_row 1):
column_list = []
for j in range (1, 4):
column_list.append(worksheet.cell(i,j).value)
# the '*' unpacks the whole list
result = the_class.create(*column_list)
Это работает для вас?