>>> 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).
"""
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
3条答案
按热度按时间gmxoilav1#
openpyxl
提供了(至少现在)一些通过Translator
类翻译公式的工具。在与公式tokenizer相关的页面中提到了它:这里有一个关于如何使用它的例子。
字符串
下面是用于翻译公式的函数的当前原型:
型
tyg4sfes2#
您将不得不手动执行此操作,但您可能希望使用tokeniser而不是编写自己的解析器。
gstyhher3#
我认为Jean Francois T.已经提供了正确的答案,它来自openpyxl文档。
下面的方法在如何使用参数上是明确的。而且,它更通用,因为它不需要文字,因此它在循环中是实用的。
假设您要将右侧的公式一列从源单元格复制到目标单元格:
字符串
其中行索引是
r=2
,列索引(对于F)是c=6
,如果你考虑文档的例子,但很容易成为循环的迭代变量。