0

我正在尝试在循环编写的 excel 电子表格中包含一个公式列。但是,公式复制到每个单元格时完全相同。

下面的脚本将为所有单元格生成公式 =IF(E2>0,(G2+H2)/E2,0)。有没有办法让它更新每一行,例如,在第 16 行,该列将读取 =IF(E16>0,(G16+H16)/E16,0)?

for iRow, stVa in enumerate(dLocP):

    stVb,stVc,stVd = dLocP[stVa]

    Cworksheet.write(iRow + 1,0,stVa)
    Cworksheet.write(iRow + 1,1,stVb)
    Cworksheet.write(iRow + 1,2,stVc)
    Cworksheet.write(iRow + 1,3,stVd)
    Cworksheet.write_formula(iRow + 1, 4, '=IF(E2>0,(G2+H2)/E2,0)')

谢谢!

4

1 回答 1

1

XlsxWriter 具有一些用于创建单元格引用的功能:

from xlsxwriter.utility import xl_rowcol_to_cell

cell = xl_rowcol_to_cell(1, 2)  # C2

但是,在这种情况下,只进行简单的字符串格式化可能会更容易:

for row_num in range(4):
    formula = '=IF(E%d>0,(G%d+H%d)/E%d,0)' % tuple([row_num + 1] * 4)

或使用新样式格式():

for row_num in range(4):
    formula = '=IF(E{}>0,(G{}+H{})/E{},0)'.format(*([row_num + 1] * 4))

在任何一种情况下,输出都将如下所示:

=IF(E1>0,(G1+H1)/E1,0)
=IF(E2>0,(G2+H2)/E2,0)
=IF(E3>0,(G3+H3)/E3,0)
=IF(E4>0,(G4+H4)/E4,0)

更新:添加了上面原始的工作示例:

for iRow, stVa in enumerate(dLocP):

    stVb,stVc,stVd = dLocP[stVa]

    Cworksheet.write(iRow + 1,0,stVa)
    Cworksheet.write(iRow + 1,1,stVb)
    Cworksheet.write(iRow + 1,2,stVc)
    Cworksheet.write(iRow + 1,3,stVd)

    formula = '=IF(E{}>0,(G{}+H{})/E{},0)'.format(*([iRow + 2] * 4))
    Cworksheet.write_formula(iRow + 1, 4, formula)
于 2014-08-08T11:46:42.763 回答