如何根据前一个单元格增加 openpyxl 中的值?

How can I increment values in openpyxl, based on the previous cell?

这个例子不会工作(+= in for loop),但它显示了我想要实现的目标:

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active

for a,b,c,d,e,f,g in sheet.iter_rows(min_col=1, max_col=7, min_row=2, max_row=8):
    a.value += 1
    b.value += 1
    c.value += 2
    d.value += 3
    e.value += 4
    f.value += 5
    g.value += 6

wb.save("multi.xlsx")

我的目标是根据前一个单元格增加每次迭代的值。所以 a.value 的结果是:1,2,3,4,5,6d.value 3,6,9,12,15,18 等等。实现此目标的最简单方法是什么?

您可以使用简单的数学运算来完成此操作。定义每列每行增加多少(记住每列都有一个数字索引),

column_amounts = {
  1 : 1,
  3 : 2,
}

然后将单元格值设置为(行 * 数量)。这样,我们可以将相同的逻辑应用于每一行和单元格,但以简单的方式更改每列的金额​​。

for a,b,c,d,e,f,g in sheet.iter_rows(min_col=1, max_col=7, min_row=2, max_row=8):
    a.value = column_amounts[a.col_idx] * a.row
    c.value = column_amounts[c.col_idx] * b.row

您也可以将其简化为一个小的辅助函数:

def amount_at_cell(cell):
  return column_amounts[cell.col_idx] * cell.row

for a,b,c,d,e,f,g in sheet.iter_rows(min_col=1, max_col=7, min_row=2, max_row=8):
    a.value = amount_at_cell(a)
    c.value = amount_at_cell(c)

有关处理单元格的 API 文档:https://openpyxl.readthedocs.io/en/latest/api/openpyxl.cell.cell.html?highlight=Cell