openpyxl - 读取循环中的下一个单元格值

时间:2017-04-24 07:09:06

标签: python excel python-2.7 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。提前致谢。

1 个答案:

答案 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函数的实现)。