formualizer
v0.1.0
Published
WebAssembly bindings for Formualizer Excel formula parser
Downloads
6
Maintainers
Readme
Formualizer (WASM)
An open‑source, embeddable spreadsheet engine — in your browser and Node. Formualizer parses, evaluates, and mutates Excel‑style workbooks at speed, with a modern Rust core, Arrow‑powered storage, and a clean JS API.
Installation
npm install formualizerUsage
JavaScript/TypeScript
import init, { tokenize, parse, Workbook } from 'formualizer';
// Initialize the WASM module once
await init();
// Tokenize a formula
const tokenizer = await tokenize("=SUM(A1:B2)");
console.log(tokenizer.tokens);
console.log(tokenizer.render());
// Parse a formula into an AST
const ast = await parse("=A1+B2*2");
console.log(ast);
// Engine-backed workbook usage
const wb = new Workbook();
wb.addSheet("Data");
wb.setValue("Data", 1, 1, 10);
wb.setValue("Data", 1, 2, 20);
wb.setFormula("Data", 1, 3, "=A1+B1");
console.log(await wb.evaluateCell("Data", 1, 3)); // 30
// Sheet facade
const sheet = wb.sheet("Sheet2");
await sheet.setValue(1, 1, 5);
await sheet.setFormula(1, 2, "=A1*3");
console.log(await sheet.evaluateCell(1, 2)); // 15Node / Bundlers
import init, { Workbook } from 'formualizer';
await init();
// Workbook + changelog/undo/redo
const wb = new Workbook();
wb.addSheet("S");
await wb.setChangelogEnabled(true);
await wb.beginAction("seed");
await wb.setValue("S", 1, 1, 10);
await wb.endAction();
await wb.beginAction("edit");
await wb.setValue("S", 1, 1, 20);
await wb.endAction();
await wb.undo(); // value back to 10
await wb.redo(); // value back to 20API
tokenize(formula: string): Promise<Tokenizer>
Tokenizes an Excel formula string into tokens.
parse(formula: string): Promise<ASTNodeData>
Parses an Excel formula string into an Abstract Syntax Tree.
Tokenizer
tokens: Get all tokens as an arrayrender(): Reconstruct the original formula from tokenslength: Number of tokensgetToken(index): Get a specific token by index
Parser
parse(): Parse the formula and return an AST
ASTNode
toJSON(): Convert the AST node to JSONtoString(): Get a string representationgetType(): Get the node type
Reference
Represents a cell or range reference in Excel notation.
Workbook
constructor()addSheet(name: string): voidsheetNames(): string[]sheet(name: string): Sheet— idempotently creates and returns a sheet facadesetValue(sheet: string, row: number, col: number, value: any): voidsetFormula(sheet: string, row: number, col: number, formula: string): voidevaluateCell(sheet: string, row: number, col: number): anysetChangelogEnabled(enabled: boolean): voidbeginAction(description: string): voidendAction(): voidundo(): voidredo(): void
Sheet
setValue(row: number, col: number, value: any): voidgetValue(row: number, col: number): anysetFormula(row: number, col: number, formula: string): voidgetFormula(row: number, col: number): string | undefinedsetValues(startRow: number, startCol: number, data: any[][]): voidsetFormulas(startRow: number, startCol: number, data: string[][]): voidevaluateCell(row: number, col: number): any
Building from Source
# Install wasm-pack
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
# Build the WASM module (bundler target for npm)
wasm-pack build --target bundler --out-dir pkg --releaseTesting
# Run Rust tests
cargo test -p formualizer-wasm
# Run WASM tests
wasm-pack test --nodeLicense
MIT OR Apache-2.0
Why Formualizer
- Speed: Arrow‑powered columnar storage, vectorized kernels, and a modern dependency graph enable fast recalculation at scale.
- Ergonomics: Engine‑backed
WorkbookandSheetsurfaces mirror spreadsheet operations and support batch edits with undo/redo. - Compatibility: Aims for Excel parity across core built‑ins; conformance suite (OpenFormula/Excel) is in progress.
Benchmarks and parity dashboards are coming soon.
