OpenPyXL 3.0.7
  • 教程
  • 简单用法
  • 性能
  • 优化模式
  • 插入和删除行和列,移动单元格范围
  • 操纵 Pandas 和 NumPy
  • 图表
  • 注释
  • 操控样式
  • 额外工作表特性
  • 条件格式化
  • 数据透视表
  • 打印设置
  • 使用过滤器和排序
  • 验证单元格
  • 定义名称
  • 工作表表格
  • 剖析公式
  • 日期和时间
  • 保护
  • 开发
  • openpyxl 包
  • 3.0.7 (2021-03-09)
  • 3.0.6 (2021-01-14)
  • 3.0.5 (2020-08-21)
  • 3.0.4 (2020-06-24)
  • 3.0.3 (2020-01-20)
  • 3.0.2 (2019-11-25)
  • 3.0.1 (2019-11-14)
  • 3.0.0 (2019-09-25)
  • 2.6.4 (2019-09-25)
  • 2.6.3 (2019-08-19)
  • 2.6.2 (2019-03-29)
  • 2.6.1 (2019-03-04)
  • 2.6.0 (2019-02-06)
  • 2.6.-b1 (2019-01-08)
  • 2.6-a1 (2018-11-21)
  • 2.5.14 (2019-01-23)
  • 2.5.13 (brown bag)
  • 2.5.12 (2018-11-29)
  • 2.5.11 (2018-11-21)
  • 2.5.10 (2018-11-13)
  • 2.5.9 (2018-10-19)
  • 2.5.8 (2018-09-25)
  • 2.5.7 (2018-09-13)
  • 2.5.6 (2018-08-30)
  • 2.5.5 (2018-08-04)
  • 2.5.4 (2018-06-07)
  • 2.5.3 (2018-04-18)
  • 2.5.2 (2018-04-06)
  • 2.5.1 (2018-03-12)
  • 2.5.0 (2018-01-24)
  • 2.5.0-b2 (2018-01-19)
  • 2.5.0-b1 (2017-10-19)
  • 2.5.0-a3 (2017-08-14)
  • 2.5.0-a2 (2017-06-25)
  • 2.5.0-a1 (2017-05-30)
  • 2.4.11 (2018-01-24)
  • 2.4.10 (2018-01-19)
  • 2.4.9 (2017-10-19)
  • 2.4.8 (2017-05-30)
  • 2.4.7 (2017-04-24)
  • 2.4.6 (2017-04-14)
  • 2.4.5 (2017-03-07)
  • 2.4.4 (2017-02-23)
  • 2.4.3 (未发行)
  • 2.4.2 (2017-01-31)
  • 2.4.1 (2016-11-23)
  • 2.4.0 (2016-09-15)
  • 2.4.0-b1 (2016-06-08)
  • 2.4.0-a1 (2016-04-11)
  • 2.3.5 (2016-04-11)
  • 2.3.4 (2016-03-16)
  • 2.3.3 (2016-01-18)
  • 2.3.2 (2015-12-07)
  • 2.3.1 (2015-11-20)
  • 2.3.0 (2015-10-20)
  • 2.3.0-b2 (2015-09-04)
  • 2.3.0-b1 (2015-06-29)
  • 2.2.6 (未发行)
  • 2.2.5 (2015-06-29)
  • 2.2.4 (2015-06-17)
  • 2.2.3 (2015-05-26)
  • 2.2.2 (2015-04-28)
  • 2.2.1 (2015-03-31)
  • 2.2.0 (2015-03-11)
  • 2.2.0-b1 (2015-02-18)
  • 2.1.5 (2015-02-18)
  • 2.1.4 (2014-12-16)
  • 2.1.3 (2014-12-09)
  • 2.1.2 (2014-10-23)
  • 2.1.1 (2014-10-08)
  • 2.1.0 (2014-09-21)
  • 2.0.5 (2014-08-08)
  • 2.0.4 (2014-06-25)
  • 2.0.3 (2014-05-22)
  • 2.0.2 (2014-05-13)
  • 2.0.1 (2014-05-13) brown bag
  • 2.0.0 (2014-05-13) brown bag
  • 1.8.6 (2014-05-05)
  • 1.8.5 (2014-03-25)
  • 1.8.4 (2014-02-25)
  • 1.8.3 (2014-02-09)
  • 1.8.2 (2014-01-17)
  • 1.8.1 (2014-01-14)
  • 1.8.0 (2014-01-08)
  • 1.7.0 (2013-10-31)
  • 剖析公式

    openpyxl supports limited parsing of formulas embedded in cells. The openpyxl.formula package contains a Tokenizer class to break formulas into their consitutuent tokens. Usage is as follows:

    >>> 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
    					

    As shown above, tokens have three attributes of interest:

    • .value : The substring of the formula that produced this token
    • .type : The type of token this represents. Can be one of
      • Token.LITERAL : If the cell does not contain a formula, its value is represented by a single LITERAL token.
      • Token.OPERAND : A generic term for any value in the Excel formula. (See .subtype below for more details).
      • Token.FUNC : Function calls are broken up into tokens for the opener (e.g., SUM( ), followed by the arguments, followed by the closer (i.e., ) ). The function name and opening parenthesis together form one FUNC token, and the matching parenthesis forms another FUNC token.
      • Token.ARRAY : Array literals (enclosed between curly braces) get two ARRAY tokens each, one for the opening { and one for the closing } .
      • Token.PAREN : When used for grouping subexpressions (and not to denote function calls), parentheses are tokenized as PAREN tokens (one per character).
      • Token.SEP : These tokens are created from either commas ( , ) or semicolons ( ; ). Commas create SEP tokens when they are used to separate function arguments (e.g., SUM(a,b) ) or when they are used to separate array elements (e.g., {a,b} ). (They have another use as an infix operator for joining ranges). Semicolons are always used to separate rows in an array literal, so always create SEP tokens.
      • Token.OP_PRE : Designates a prefix unary operator. Its value is always + or -
      • Token.OP_IN : Designates an infix binary operator. Possible 值为 >= , <= , <> , = , > , < , * , / , + , - , ^ ,或 & .
      • Token.OP_POST : Designates a postfix unary operator. Its value is always % .
      • Token.WSPACE : Created for any whitespace encountered. Its value is always a single space, regardless of how much whitespace is found.
    • .subtype : Some of the token types above use the subtype to provide additional information about the token. Possible subtypes 是:
      • Token.TEXT , Token.NUMBER , Token.LOGICAL , Token.ERROR , Token.RANGE : these subtypes describe the various forms of OPERAND found in formulae. LOGICAL is either TRUE or FALSE , RANGE is either a named range or a direct reference to another range. TEXT , NUMBER ,和 ERROR all refer to literal values in the formula
      • Token.OPEN and Token.CLOSE : these two subtypes are used by PAREN , FUNC ,和 ARRAY , to describe whether the token is opening a new subexpression or closing it.
      • Token.ARG and Token.ROW : are used by the SEP tokens, to distinguish between the comma and semicolon. Commas produce tokens of subtype ARG whereas semicolons produce tokens of subtype ROW

    Translating formulae from one location to another

    It is possible to translate (in the mathematical sense) formulae from one location to another using the openpyxl.formulas.translate.Translator class. For example, there a range of cells B2:E7 with a sum of each row in column 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)'
    					

    注意

    This is limited to the same general restrictions of formulae: A1 cell-references only and no support for defined names.