Skip to main content

Calculate XLSX formulas

Project description

Calculate XLSX formulas

CI Coverage Status PyPI version License: MIT

xlsx_evaluate - python library to convert excel functions in python code without the need for Excel itself within the scope of supported features.

This library is fork xlcalculator. Use this library.

Summary

Installation

# pip
pip install xlsx-evaluate
# poetry
poetry add xlsx-evaluate

Example

input_dict = {
    'B4': 0.95,
    'B2': 1000,
    "B19": 0.001,
    'B20': 4,
    'B22': 1,
    'B23': 2,
    'B24': 3,
    'B25': '=B2*B4',
    'B26': 5,
    'B27': 6,
    'B28': '=B19 * B20 * B22',
    'C22': '=SUM(B22:B28)',
    "D1": "abc",
    "D2": "bca",
    "D3": "=CONCATENATE(D1, D2)",
  }

from xlsx_evaluate import ModelCompiler
from xlsx_evaluate import Evaluator

compiler = ModelCompiler()
my_model = compiler.read_and_parse_dict(input_dict)
evaluator = Evaluator(my_model)

for formula in my_model.formulae:
    print(f'Formula {formula} evaluates to {evaluator.evaluate(formula)}')

# cells need a sheet and Sheet1 is default.
evaluator.set_cell_value('Sheet1!B22', 100)
print('Formula B28 now evaluates to', evaluator.evaluate('Sheet1!B28'))
print('Formula C22 now evaluates to', evaluator.evaluate('Sheet1!C22'))
print('Formula D3 now evaluates to', evaluator.evaluate("Sheet1!D3"))

TODO

  • Do not treat ranges as a granular AST node it instead as an operation ":" of two cell references to create the range. That will make implementing features like A1:OFFSET(...) easy to implement.

  • Support for alternative range evaluation: by ref (pointer), by expr (lazy eval) and current eval mode.

    • Pointers would allow easy implementations of functions like OFFSET().

    • Lazy evals will allow efficient implementation of IF() since execution of true and false expressions can be delayed until it is decided which expression is needed.

  • Implement array functions. It is really not that hard once a proper RangeData class has been implemented on which one can easily act with scalar functions.

  • Improve testing

  • Refactor model and evaluator to use pass-by-object-reference for values of cells which then get "used"/referenced by ranges, defined names and formulas

  • Handle multi-file addresses

  • Improve integration with pyopenxl for reading and writing files example of problem space

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xlsx_evaluate-0.4.7.tar.gz (41.5 kB view details)

Uploaded Source

Built Distribution

xlsx_evaluate-0.4.7-py3-none-any.whl (48.1 kB view details)

Uploaded Python 3

File details

Details for the file xlsx_evaluate-0.4.7.tar.gz.

File metadata

  • Download URL: xlsx_evaluate-0.4.7.tar.gz
  • Upload date:
  • Size: 41.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.3 readme-renderer/37.2 requests/2.28.1 requests-toolbelt/0.10.1 urllib3/1.26.12 tqdm/4.64.1 importlib-metadata/5.0.0 keyring/23.9.3 rfc3986/2.0.0 colorama/0.4.6 CPython/3.9.15

File hashes

Hashes for xlsx_evaluate-0.4.7.tar.gz
Algorithm Hash digest
SHA256 f5ec07b013ffd025e1fa18f53f39e272d5db837c6a63b8c3716046c2767e4b8a
MD5 80e81ce20f1843cd2a59efb7b5ec4d2c
BLAKE2b-256 c68e0508b8ceb2347d8703a244cf8c994a653ce5de19a23a55024abe83bfa75c

See more details on using hashes here.

File details

Details for the file xlsx_evaluate-0.4.7-py3-none-any.whl.

File metadata

  • Download URL: xlsx_evaluate-0.4.7-py3-none-any.whl
  • Upload date:
  • Size: 48.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.3 readme-renderer/37.2 requests/2.28.1 requests-toolbelt/0.10.1 urllib3/1.26.12 tqdm/4.64.1 importlib-metadata/5.0.0 keyring/23.9.3 rfc3986/2.0.0 colorama/0.4.6 CPython/3.9.15

File hashes

Hashes for xlsx_evaluate-0.4.7-py3-none-any.whl
Algorithm Hash digest
SHA256 c4f92d1f2701bfaf90687b33bf1e82cfa57cc0d91641cd12c6353c5476aa7851
MD5 a8ba51b215be8013a30cbb2de849e0cd
BLAKE2b-256 066a0c020b21d6a9227b04b58baa84cbaddb2bda7c6d087deee17ca85fc70b20

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page