использование openpyxl Tokenizer для разбора операторов Excel IF

1

Я нашел этот документ в 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-3.x
excel-formula
openpyxl
tokenize

1 ответ

0

openpyxl никогда не оценивает формулы. Токенизатор используется исключительно для распаковки и переназначения общих формул. Существуют и другие библиотеки для оценки формул, но вам, как правило, лучше передавать файл в приложение, такое как MS Excel или OpenOffice или LibreOffice, для оценки, поскольку они содержат оптимизацию для расчета, включая параллелизацию.

  • 0
    Знаете ли вы какие-либо библиотеки, которые оценивают формулы? Я хотел бы попробовать сравнить производительность.
  • 0
    Я думаю, что PyCell - это Python, но я никогда не использовал его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню