Formula Engine API
pyopenxlsx exposes the OpenXLSX-NX formula engine so you can evaluate Excel formulas in Python without Microsoft Excel. Two façades are provided:
Class |
Role |
|---|---|
|
Stateless evaluation of a single formula string |
|
Sheet/workbook recalculation with dependency tracking |
FormulaEngine
from pyopenxlsx import Workbook, FormulaEngine
engine = FormulaEngine()
# Basic evaluation (optional leading '=')
assert engine.evaluate("1 + 2 * 3") == 7
assert engine.evaluate('="Hello " & "World"') == "Hello World"
assert engine.evaluate("=IF(10 > 5, TRUE, FALSE)") is True
Contextual evaluation
Pass a high-level Worksheet so cell references resolve against live data:
from pyopenxlsx import Workbook, FormulaEngine
wb = Workbook()
ws = wb.active
ws["A1"].value = 10
ws["A2"].value = 20
ws["B1"].value = 5
engine = FormulaEngine()
assert engine.evaluate("SUM(A1:A2) * B1", ws) == 150
# or keyword form
assert engine.evaluate("SUM(A1:A2)", worksheet=ws) == 30
Relative context (ROW / COLUMN)
# Current cell context for parameterless ROW()/COLUMN()
engine.evaluate("ROW()", current_row=5, current_col=2, current_sheet="Sheet1")
Convenience methods
engine.sum("A1:A10", worksheet=ws)
engine.average("B1:B10", worksheet=ws)
engine.evaluate_many(["SUM(A1:A3)", "AVERAGE(A1:A3)"], worksheet=ws)
evaluate signature
evaluate(
formula: str,
worksheet=None,
*,
session=None,
reporter=None,
current_row=None,
current_col=None,
current_sheet=None,
) -> Any
formula: With or without a leading
=.worksheet: High-level
WorksheetorNonefor pure expressions.Returns: Python scalar (
int/float/str/bool), or raises on failure.
CalculationEngine
Recalculate formulas stored in cells with dependency tracking:
from pyopenxlsx import Workbook, CalculationEngine
wb = Workbook()
ws = wb.active
ws["A1"].value = 10
ws["A2"].formula = "A1*2"
calc = CalculationEngine(ws) # or Workbook
calc.rebuild()
n = calc.recalculate()
assert ws["A2"].value == 20 # after write-back options / cell update semantics
Methods
rebuild(),recalculate(),recalculate_all()calc_cell_value(a1),mark_dirty(a1),set_input_value(a1, value)Properties:
formula_count,dirty_count
Optional native XLCalculationOptions control write-back and defined-name usage.