1

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

提前谢谢你,萨沙

4

6 回答 6

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')
于 2009-07-12T20:19:39.017 回答
0

如果您使用 COM 绑定,那么您可以简单地在 Excel 中记录一个宏,然后将其转换为 Python 代码。
如果您使用的是 xlwt,则必须求助于 python 中的正常循环。

于 2009-07-12T20:02:31.110 回答
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)

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

于 2009-07-26T02:48:08.650 回答
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)
于 2011-03-29T22:57:54.753 回答
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
于 2016-04-02T22:24:16.803 回答
0

使用其中一个 COM 包装库将允许您使用用 Python 编写的用户定义函数。这是xlwingsPyXll的领域。

FlyingKoala也这样做,因为它是 xlwings 的扩展。FlyingKoala 增加了(即时)读取 Excel 函数并将其转换为 Python 代码并在 Python 中计算方程的能力。

于 2020-05-04T07:28:17.577 回答