我想使用Python在Excel中插入计算。 通常,可以通过将公式字符串插入相关单元格来完成。 但是,如果我需要为整列计算多次公式 必须为每个单独的单元格更新公式。例如,如果我需要 计算两个单元的总和,然后对于单元C(k),计算将是A(k)+ B(k)。 在excel中,可以计算C1 = A1 + B1,然后自动扩展 通过从C1向下拖动鼠标进行计算。 我的问题是:是否可以使用Python进行相同的操作,即仅在一个单元格中定义公式,然后使用Excel功能扩展整个列/行的计算?
提前谢谢你, 武
答案 0 :(得分:3)
如Roberto 所述,您可以使用 xlwt 和可信赖的for循环:
import xlwt
w = xlwt.Workbook()
ws = w.add_sheet('mysheet')
for i in range(10):
ws.write(i, 0, i)
ws.write(i, 1, i+1)
ws.write(i, 2, xlwt.Formula("$A$%d+$B$%d" % (i+1, i+1)))
w.save('myworkbook.xls')
答案 1 :(得分:0)
如果您使用的是COM绑定,那么您只需在Excel中录制宏,然后将其转换为Python代码即可 如果您使用的是xlwt,则必须在python中使用普通循环。
答案 2 :(得分:0)
从宏中翻译的Python代码如下所示:
startCell = mySheet.Range("M6")
wholeRange = mySheet.Range("M6:M592")
startCell.FormulaR1C1 = "=R[-1]C[-7]/RC[-10]*R[-1]C"
startCell.AutoFill(Destination=wholeRange)
没有测试过,但我经常在工作中写这个。如果它不起作用,请告诉我。
答案 3 :(得分:0)
如果你想在水平方向上迭代,这是我使用的一个函数。 0 - > a,26 - > aa,723 - > aav
def _num_to_let(num):
if num > 25:
return _num_to_let(num/26-1) + chr(97+ num % 26)
return chr(97+num)
答案 4 :(得分:0)
如果你想在xlwt中迭代列(在公式中),你可以使用xlwt中的Utils模块,如下所示:
from xlwt import Utils
print Utils.rowcol_pair_to_cellrange(2,2,12,2)
print Utils.rowcol_to_cell(13,2)
>>>
C3:C13
C14
答案 5 :(得分:0)
使用COM包装库之一将允许您使用以Python编写的用户定义函数。这是xlwings和PyXll的域。
FlyingKoala也可以这样做,因为它是xlwings的扩展。 FlyingKoala增加了(即时)读取Excel函数并将其转换为Python代码并使用Python评估方程的功能。