我正在创建一个循环来遍历工作表中的单元格。在某些情况下,我想在循环中访问下一个单元格值。
import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
wb = wb.get_sheet_by_name("Sheet 1")
for row in wb['A1' : 'B150']:
for cell in row:
print cell.value # prints current active cell
if something:
# print next cell value
请建议一种在循环中访问下一个单元格值的方法。我正在使用python 2.7。提前致谢。
答案 0 :(得分:1)
嗯,这不是OpenPyXl特定的问题,而是更多关于迭代器的问题。
你可以做的是编写一个迭代序列的函数,然后返回当前和下一个项目。
例如:
def iter_curr_next(seq):
iter_seq = iter(seq)
curr_item = next(iter_seq)
next_item = next(iter_seq) # may raise StopIteration
yield curr_item, next_item
while True:
curr_item = next_item
next_item = next(iter_seq) # may raise StopIteration
yield curr_item, next_item
注意:此函数返回情侣(curr_item,next_item),直到最后一个。
以下是如何使用此功能(例如,当电流为奇数时,我们显示当前和下一个项目):
row = [1, 2, 3, 5, 6, 5]
for curr_item, next_item in iter_curr_next(row):
if curr_item % 2 == 1:
print(curr_item, next_item)
你得到:
1 2
3 5
5 6
但是,这有点复杂......
你可以做的是创建一个列表(或一个元组)并以这种方式迭代:
for curr_item, next_item in zip(row[:-1], row[1:]):
if curr_item % 2 == 1:
print(curr_item, next_item)
你得到的结果相同。
如果事实是,当您使用OpenPyXl迭代工作表的行时,每一行都是一个元组。因此,之前的for
循环将起作用(请参阅:openpyxl.worksheet.worksheet.Worksheet.get_squared_range
函数的实现)。