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