Хранение значений в разных переменных во вложенном цикле - PullRequest
1 голос
/ 04 апреля 2019

В настоящее время я пишу фрагмент кода, который перебирает строки и столбцы электронной таблицы, а затем использует значение ячейки в строке 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() в том же для цикла .

Однако я хотел бы также отслеживать столбцы в цикле с отдельным индексом.Причина этого заключается в том, что я хотел бы распечатать сообщение для пользователя, когда он встретил пустую ячейку в строке i и столбце j.

В качестве решения я подумал, что было бы полезно использовать вложенный цикл для отслеживания столбцов:

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 Ответ

2 голосов
/ 04 апреля 2019

Если вы действительно хотите использовать цикл 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)

это работа для вас?

...