openpyxl中能否使用lambda实现单元格求和赋值?
能否用Lambda实现指定单元格求和需求?
先给你明确说:可以用lambda配合其他工具实现,但lambda本身没法单独完成你要的循环累加逻辑,下面给你拆解问题和可行的写法。
你原来的while循环逻辑是没问题的(注意补全mysum的初始化):
dailycell = 45 mysum = 0 while sheet['E' + str(dailycell)].value is not None: mysum += sheet['E' + str(dailycell)].value sheet['B13'] = mysum dailycell += 1
但你尝试的lambda写法有两个核心问题:
- lambda的语法是
lambda 参数: 单一表达式,它不支持weeklybudget+=...这种赋值操作,只能返回一个值,无法修改外部变量; - lambda本身没有循环能力,没法像while那样逐行遍历单元格。
如果你想用lambda参与这个逻辑,可以结合itertools.takewhile和sum()来实现,代码示例如下:
from itertools import takewhile # 生成从E45开始的所有E列单元格的迭代器 e_cells = (sheet[f'E{row}'] for row in range(45, sheet.max_row + 1)) # 用takewhile+lambda筛选出非空单元格,直到遇到第一个空单元格停止 non_empty_e_cells = takewhile(lambda cell: cell.value is not None, e_cells) # 对筛选后的单元格值求和,赋值给B13 sheet['B13'].value = sum(cell.value for cell in non_empty_e_cells)
这里的lambda只是用来做判断单元格是否非空的逻辑,真正的循环和累加是由takewhile和sum()完成的——takewhile帮你遍历到第一个空单元格为止,sum()帮你完成累加。
最后多说一句:其实对于这种需要明确遍历终止条件的场景,你原来的while循环可读性反而更高,lambda的写法只是一种替代方案,不是必须的。
内容的提问来源于stack exchange,提问作者Longroadahead
相关产品推荐
相关产品推荐

