I’m currently writing a piece of code that loops through the rows and columns of a spreadsheet and then uses the value of the cell at row
r and column
c in the parameter of a function. I currently have it working as following:
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)
Where the index
i loops through the rows in the sheet. I’m using the
worksheet.cell(row,column).value function from the
openpyxl library and store them in the
x_column variables. Later, these variables get used as parameters in the
class.create() function within the same for loop.
However, what I would like to do is to keep track of the columns in the loop as well, with a separate index. Reason for this is that I would like to print out a message to the user when he an empty cell has been encountered at row
i and column
As a solution, I thought it could be useful to use a nested for loop to keep track of the columns:
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)
However, this will obviously not increment the index
j within the same iteration of the second loop. Any idea how to solve this?
If you really want to use a for loop for the columns, you could use a list to gatter the values of the cells and then unpack that list to pass the gattered values to the method
This is also flexible if you want to add more columns without changing a lot of code, just increase the range of the second loop.
It could look like this:
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)
Does that work for you?