excel 使用openpyxl将公式从一个单元格复制到另一个单元格

3bygqnnd  于 2023-11-20  发布在  其他
关注(0)|答案(3)|浏览(214)

我想使用openpyxl将公式从一个单元格复制粘贴到另一个单元格,这是您使用Excel时通常会得到的转换。
例如,将公式=SUM(J3:J18)复制到下一列将自动将其更改为=SUM(K3:K18)
我发现这个方法可以通过使用win32com.client来工作,但我不知道openpyxl的任何等效方法。
有没有一种方法可以使用openpyxl来实现这一点,或者我应该使用正则表达式手动替换所有的列号?
谢谢

gmxoilav

gmxoilav1#

openpyxl提供了(至少现在)一些通过Translator类翻译公式的工具。在与公式tokenizer相关的页面中提到了它:
这里有一个关于如何使用它的例子。

>>> from openpyxl.formula.translate import Translator
 >>> ws['F2'] = "=SUM(B2:E2)"
 >>> # move the formula one colum to the right
 >>> ws['G2'] = Translator("=SUM(B2:E2)", "F2").translate_formula("G2")
 >>> ws['G2'].value
 '=SUM(C2:F2)'

字符串
下面是用于翻译公式的函数的当前原型:

def translate_formula(self, dest=None, row=None, col=None):
    """
    Convert the formula into A1 notation, or as row and column coordinates

    The formula is converted into A1 assuming it is assigned to the cell
    whose address is `dest` (no worksheet name).

    """

tyg4sfes

tyg4sfes2#

您将不得不手动执行此操作,但您可能希望使用tokeniser而不是编写自己的解析器。

gstyhher

gstyhher3#

我认为Jean Francois T.已经提供了正确的答案,它来自openpyxl文档。
下面的方法在如何使用参数上是明确的。而且,它更通用,因为它不需要文字,因此它在循环中是实用的。
假设您要将右侧的公式一列从源单元格复制到目标单元格:

from openpyxl.formula.translate import Translator
source_cell = ws.cell(row=r, column=c)
dest_cell = ws.cell(row=r, column=c+1) # one column to the right
formula = source_cell.value
translated = Translator(formula, source_cell.coordinate).translate_formula(dest_cell.coordinate)
ws[dest_cell.coordinate] = translated

字符串
其中行索引是r=2,列索引(对于F)是c=6,如果你考虑文档的例子,但很容易成为循环的迭代变量。

相关问题