OpenPyXl-在循环中读取下一个单元格值



我正在创建一个循环以遍历纸张中的单元格。在某些情况下,我想在循环中访问下一个单元格值。

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。提前致谢。

好吧,这不是一个开放的特定问题,而是关于迭代器的问题。

您可以做的是编写一个通过序列迭代并返回当前和下一个项目的函数。

例如:

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函数的实现(。

相关内容

最新更新