openpyxl3.0官方文档(34)—— 公式解析

2020-07-15  本文已影响0人  Sinchard

openpyxl仅支持对单元格中嵌入的公式进行有限的解析。那个openpyxl.formula包包含一个Tokenizer类,用于将公式分解为其组成的标记。用法如下:

    >>> from openpyxl.formula import Tokenizer
    >>> tok = Tokenizer("""=IF($A$1,"then True",MAX(DEFAULT_VAL,'Sheet 2'!B1))""")
    >>> print("\n".join("%12s%11s%9s" % (t.value, t.type, t.subtype) for t in tok.items))
             IF(       FUNC     OPEN
            $A$1    OPERAND    RANGE
               ,        SEP      ARG
     "then True"    OPERAND     TEXT
               ,        SEP      ARG
            MAX(       FUNC     OPEN
     DEFAULT_VAL    OPERAND    RANGE
               ,        SEP      ARG
    'Sheet 2'!B1    OPERAND    RANGE
               )       FUNC    CLOSE
               )       FUNC    CLOSE
    

如上所示,Tokenizer类有三个有趣的属性:

将公式从一个位置转换到另一个位置¶

在数学意义上,可以使用:class:openpyxl.formulas.translate.Translator类。例如,有一个单元格区域“B2:E7”,其中“F”列中每行的总和为:

    >>> 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)", origin="F2").translate_formula("G2")
    >>> ws['G2'].value
    '=SUM(C2:F2)'
    

注意,“A1”单元格只引用,不支持已定义的名称。

上一篇 下一篇

猜你喜欢

热点阅读