【问题标题】:using openpyxl Tokenizer to parse Excel IF statements使用 openpyxl Tokenizer 解析 Excel IF 语句
【发布时间】:2018-07-25 21:34:59
【问题描述】:

我找到了this doc on Tokenizer,但它没有说明如何使用公式并实际执行它(没有它似乎毫无用处)。

我有一些简单的IF 需要处理:

formula = '''IF(size<80000,size/80000*(1.85-1.65)+1.65,IF(size<160000
    (size-80000)/80000*(1.65-1.45)+1.45,IF(size<280000,(size-160000)/
    120000*(1.45-1.05)+1.05,IF(size<800000,(size-280000)/520000*(1.05-0.7)+0.7,0))))'''

from openpyxl.formula import Tokenizer
tok = Tokenizer(formula)

我可以看到tok的方法:

print([d for d in dir(tok) if '__' not in d])
['ERROR_CODES', 'SN_RE', 'STRING_REGEXES', 'TOKEN_ENDERS', 'WSPACE_RE', '_parse', '_parse_brackets', '_parse_closer', '_parse_error', '_parse_opener', '_parse_operator', '_parse_separator', '_parse_string', '_parse_whitespace', 'assert_empty_token', 'check_scientific_notation', 'formula', 'items', 'offset', 'render', 'save_token', 'token', 'token_stack']

如果我想将size=100 传递给这个tok 实例并执行它以获得返回结果,我该怎么做?

有一种明显的方法可以使用已解析的标记构建 AST,但我很好奇是否可以将公式写入内存中的 Excel 文档并以这种方式执行函数,如果这样更容易的话。我没有这方面的 Excel 文档。我只有很多公式字符串。

【问题讨论】:

    标签: python python-3.x excel-formula tokenize openpyxl


    【解决方案1】:

    openpyxl 从不计算公式。标记器仅用于解包和重新分配共享公式。确实存在用于评估公式的其他库,但您通常最好将文件传递给 MS Excel 或 OpenOffice 或 LibreOffice 等应用程序进行评估,因为这些库包含计算优化,包括并行化。

    【讨论】:

    • 你知道任何计算公式的库吗?我想尝试比较性能。
    • 我认为 PyCell 是 Python 的,但我从未使用过它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2019-08-29
    • 2013-08-19
    • 1970-01-01
    • 2016-06-16
    • 2022-01-22
    相关资源
    最近更新 更多