Python xlsxwriter:在创建公式时,在循环中调整excel引用单元格

时间:2014-08-07 13:04:10

标签: python-2.7 formula xlsxwriter

我试图在循环中编写的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)')

谢谢!

1 个答案:

答案 0 :(得分:1)

XlsxWriter具有creating cell references的一些功能:

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)