使用Python计算Excel中的公式

我想使用Python在Excel中插入一个计算。 通常可以通过将公式string插入到相关的单元格中来完成。 但是,如果我需要为整个列多次计算公式,则必须为每个单独的单元格更新公式。 例如,如果我需要计算两个单元格的总和,那么对于单元格C(k),计算就是A(k)+ B(k)。 在Excel中,可以计算C1 = A1 + B1,然后通过从C1向下拖动鼠标自动扩展计算。 我的问题是:是否有可能与Python相同的事情,即只在一个单元格中定义公式,然后使用Excelfunction来扩展整个列/行的计算?

谢谢你,萨沙

正如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') 

如果您使用的是COM绑定,那么您可以简单地在Excel中录制macros,然后将其转换为Python代码。
如果你正在使用xlwt,你不得不求助于正常的python循环..

萨沙

从您的macros翻译的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) 

没有testing过,但是我经常在工作中写这个。 让我知道如果它不起作用。

如果你想在水平方向迭代,这里是我使用的函数。 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) 

如果你想在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