我需要将公式从以编程方式确定的列复制到相邻列,并且需要公式单元格引用随该列“移动”。例如,单元格 E2 中有公式
='Copy ATDs'!B60
,我需要将公式复制到单元格 F2 作为 ='Copy ATDs'!C60
文档中的示例如下(原文如此):
>>> from openpyxl.formula.translate import Translator
>>> ws['F2'] = "=SUM(B2:E2)"
>>> # move the formula one colum to the right
>>> formula = Translator("=SUM(B2:E2)", "G2")
'=SUM(C2:F2)'
我理解这意味着如果第二个参数移动一列,翻译器函数将返回一个转置一列的公式。
我使用的代码如下:
new_cell_ref = ws_dt.cell(column=source_col, row=r).offset(row=0, column=1).address()
ws_dt.cell(column=new_col, row=r).value = \
Translator(ws_dt.cell(column=source_col, row=r).value, \
new_cell_ref.column + str(new_cell_ref.row)).tokenizer.formula
Translator 函数似乎并不关心第二个参数是什么。它始终返回原始公式,而不翻译任何内容。请帮助我理解我做错了什么。
文档有点不透明,但是您可以使用 Translator 类来设置公式当前所在的位置,然后使用 translate_formula 方法来实际翻译它
翻译器(公式,当前单元格).translate_formula(目标单元格)==公式翻译
Translator('=A1+B1', 'C1').translate_formula('C2') == '=A2+B2'
然后将该新公式分配给单元格值。