我想使用Python在Excel中插入计算。 一般来说,可以通过插入公式字符串到相关的细胞来完成。 然而,如果我需要多次以计算公式整个列式必须为每个单独的小区更新。 例如,如果我需要计算两个单元的总和,则对于电池C(k)的计算将是第(k)+ B(k)的。 在Excel中也能够计算C1 = A1 + B1,然后通过从C1拖动鼠标向下自动扩展的计算。 我的问题是:是否有可能同样的事情与Python,即只在一个单元格定义公式,然后使用Excel功能来扩展计算整个列/行?
谢谢你在前进,萨沙
我想使用Python在Excel中插入计算。 一般来说,可以通过插入公式字符串到相关的细胞来完成。 然而,如果我需要多次以计算公式整个列式必须为每个单独的小区更新。 例如,如果我需要计算两个单元的总和,则对于电池C(k)的计算将是第(k)+ B(k)的。 在Excel中也能够计算C1 = A1 + B1,然后通过从C1拖动鼠标向下自动扩展的计算。 我的问题是:是否有可能同样的事情与Python,即只在一个单元格定义公式,然后使用Excel功能来扩展计算整个列/行?
谢谢你在前进,萨沙
正如罗伯特提到,您可以使用xlwt和环一个值得信赖的:
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中的宏,然后将它翻译成Python代码。
如果你正在使用xlwt,你不得不求助于在python正常循环..
萨沙
从您的宏翻译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)
没有测试过,但我写这篇文章经常在工作中。 让我知道,如果它不能正常工作。
如果你想在水平方向上进行迭代,这里是我使用的功能。 0 - >一个,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迭代的列(公式),可以使用utils的模块,这样从xlwt:
from xlwt import Utils
print Utils.rowcol_pair_to_cellrange(2,2,12,2)
print Utils.rowcol_to_cell(13,2)
>>>
C3:C13
C14