unstale

npm / @betteroffice/xlsx

@betteroffice/xlsx

What changed in @betteroffice/xlsx 0.3 to 0.5, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-28.

5 breaking2 security45 new APIs and options7 behavior and defaults31 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.2.9 on npm

@betteroffice/xlsx 0.559 changes

Breaking changes 3

  • Workbooks with more than 65,536 defined names open and recalculate; edits exceeding a 32 MiB name-and-formula-text bound are refused without changing the workbook.

    0.5.0release notes

  • Implementations must add the new members, including moveRange, setHyperlink and listDefinedNames.

    0.5.0release notes

  • Opening rejects workbook parts with an unsupported main namespace or a non-workbook root instead of opening them, while leaving the current document open.

    0.5.0release notes

New APIs and options 28

  • Agent cell writes, formatting, sorting and find/replace can opt in with protectedSheets: "allow"; protection remains, edits are reported through protectedCells, and the default is "refuse".

    0.5.1release notes

  • readCells results now include sheets[].visibility by default, with unknown when visibility cannot be determined.

    0.5.1release notes

  • Supports typed defined name operations.

    0.5.0release notes

  • Custom async replicas can opt in to merging queued remote updates in one worker command.

    0.5.0release notes

  • Adds a worker entry point with the worker session API and types; the root entry continues to export them.

    0.5.0release notes

  • Reports budgetExhausted: true when the last recalculation ran out of budget, indicating unevaluated cells kept their saved values.

    0.5.0release notes

  • Adds chart discovery for workbooks.

    0.5.0release notes

  • Lists conditional formatting rules for a sheet.

    0.5.0release notes

  • Syncs collaboration replicas whose state lives in a worker.

    0.5.0release notes

  • Adds atomic chart title and series edits, including title replacement or removal, series renaming, and category or value reference changes on unshared chart parts.

    0.5.0release notes

  • Adds paginated reads of defined names.

    0.5.0release notes

  • Adds a merge lookup direction for selection.

    0.5.0release notes

  • Adds a workbook operation for moving a range.

    0.5.0release notes

  • Adds an experimental worker-backed workbook session for async reads, version-checked edits, saving, per-viewport call.frame display lists, and cancellation through signal.

    0.5.0release notes

  • Adds a workbook operation for removing hyperlinks.

    0.5.0release notes

  • Adds optional merge data to SelectionData.

    0.5.0release notes

  • Adds operations to set, extend, or remove worksheet filter buttons while preserving filter criteria; ranges overlapping tables are refused.

    0.5.0release notes

  • Adds a setCellValues step.

    0.5.0release notes

  • Adds a workbook operation for setting hyperlinks.

    0.5.0release notes

  • Listeners now receive { fromPeer }.

    0.5.0release notes

  • Adds an agent tool for editing chart titles and series.

    0.5.0release notes

  • Adds agent operations to add or delete cellIs and expression rules with a differential format.

    0.5.0release notes

  • Adds agent operations for editing workbook- and sheet-scoped defined names, including hidden flags.

    0.5.0release notes

  • Adds an agent tool for chart discovery.

    0.5.0release notes

  • Adds an agent tool for listing conditional formatting rules.

    0.5.0release notes

  • Adds an agent operation for listing workbook- and sheet-scoped defined names, including hidden flags.

    0.5.0release notes

  • Adds an agent tool for reading chart text.

    0.5.0release notes

  • Adds an agent operation to set, extend, or remove worksheet filter buttons while preserving filter criteria; ranges overlapping tables are refused.

    0.5.0release notes

Behavior and default changes 3

  • Sheet outlines include autoFilter by default.

    0.5.0release notes

  • Worker editors now run CollaborationProvider in the workbook worker by default and batch incoming transport frames into one session command.

    0.5.0release notes

  • Keyboard navigation follows Excel by default: Ctrl/Meta+Arrow stops at data edges, Ctrl/Meta+A selects in two stages, Ctrl+End reaches the used range, and hidden rows and columns are skipped.

    0.5.0release notes

Fixes and other changes 25

  • Axes now honour tick label position: none hides labels and frees plot space, high moves labels to the far side, and a deleted category axis draws no labels.

    0.5.1release notes

  • Formulas now coerce currency text when workbook number formats provide currency evidence; formula entry and formatting edits use the same evidence as recalculation.

    0.5.1release notes

  • Bar and column labels now follow PowerPoint and Excel placement for outside end, inside end and inside base; horizontal bars are centred, as are stacked charts by default.

    0.5.1release notes

  • Pie and doughnut labels now follow PowerPoint and Excel placement for their slices, best fit, outside end and doughnut rings.

    0.5.1release notes

  • Zero-valued bar and column labels now sit on the side specified by the value axis, including when the axis is reversed.

    0.5.1release notes

  • INDIRECT now resolves lowercase and R1C1-style references; formulas pointing to a deleted cell on another sheet show #REF! rather than a blank or stale value.

    0.5.1release notes

  • Large-data-sheet SUMPRODUCT formulas using array (Ctrl+Shift+Enter) formulas now calculate every cell instead of stopping partway through with #NUM!.

    0.5.1release notes

  • SUMPRODUCT data columns containing a few formula cells now calculate every cell instead of stopping partway through with #NUM!.

    0.5.1release notes

  • Worksheet titles and sheet-qualified named-range titles in workbook properties stay current when sheets are renamed or moved; properties are preserved when titles cannot be mapped reliably.

    0.5.1release notes

  • Sheets with more than 65,536 styled rows can now open, edit and save; live collaboration is refused for sheets with more than about 333,000 styled rows.

    0.5.1release notes

  • The XlsxSheetVisibility type is now exported from both package roots.

    0.5.1release notes

  • Formulas cut short by the recalculation budget keep saved values under IFERROR, ISERROR, and other IS functions, and show #NUM! when no saved value exists.

    0.5.0release notes

  • Returns Windows-1252 characters for codes 128 to 159, matching Excel.

    0.5.0release notes

  • Maps Windows-1252 characters in the 128-to-159 range back to their codes, as Excel does.

    0.5.0release notes

  • Recalculation now computes FORECAST instead of returning #NAME?.

    0.5.0release notes

  • Recalculation now computes FORECAST.LINEAR instead of returning #NAME?.

    0.5.0release notes

  • The in-thread XLSX editor now calls onChange when a collaborator's edit changes the workbook, including a full-state update into a freshly opened replica.

    0.5.0release notes

  • A workbook too large for engine memory now fails the session with an out-of-memory failure that explains the workbook is too large, rather than a bare trap.

    0.5.0release notes

  • Recalculation now computes RAND instead of returning #NAME?.

    0.5.0release notes

  • Recalculation supports RSQ; RSQ over ranges with no numeric pairs returns #DIV/0!, as Excel does.

    0.5.0release notes

  • Long, mostly empty ranges now recalculate to Excel's results instead of showing #NUM!.

    0.5.0release notes

  • Long recalculations report progress so the 60-second watchdog fires only for a worker that has gone silent; queued edits apply after recalculation returns.

    0.5.0release notes

  • Sessions no longer fail after 256 edits or selection moves without a recovery checkpoint; the session checkpoints its recovery log, including for headless sessions.

    0.5.0release notes

  • Wrapped cells break into lines on screen and in print at line breaks and between words; rows without a set height grow to fit.

    0.5.0release notes

  • Scalar lookups over formula-computed arrays now work; reference arguments are read once, and mismatched lookup-vector orientation returns #VALUE! as Excel does.

    0.5.0release notes

@betteroffice/xlsx 0.331 changes

Breaking changes 2

  • Entering values into Text-formatted cells honors the cell format, including for numeric strings, booleans, and formula-looking text; general cells retain Excel-style coercion.

    0.3.0release notes

  • Text that outgrows a cell spills across adjacent blank cells toward its alignment side, stopping at visible content, merges, or laid-out column edges.

    0.3.0release notes

Security 2

  • Recalculation charges array and text work against budgets and stops early when limits would be exceeded, preserving cached values instead of consuming excessive time or memory.

    0.3.0release notes

  • Exports workbook content as bounded Markdown with per-sheet grids, escaped document text, safe hyperlink destinations, and anchors for export markers.

    0.3.0release notes

New APIs and options 17

  • The formula engine adds twenty-three previously unimplemented functions and supports computed array arguments, whole-row and reference-range references, and per-element results.

    0.3.0release notes

  • Adds a text search API for formatted workbook cell values.

    0.3.0release notes

  • Adds INDIRECT as a reference- and value-resolving function accepted by range-taking functions; it accepts only reference-shaped strings.

    0.3.0release notes

  • The formula engine evaluates LET bindings and LAMBDA values, including callbacks such as BYROW, MAP, REDUCE, SCAN, and MAKEARRAY.

    0.3.0release notes

  • Adds LINEST for one or more predictors, including the requested full statistics block; scalar cells can read array-only results through INDEX.

    0.3.0release notes

  • Adds matrix multiplication with dimension checks, error propagation, and array results that spill in dynamic-array formulas or fill legacy array-formula ranges.

    0.3.0release notes

  • Adds OFFSET as a reference-producing formula function, including negative dimensions, reference-taking functions, and dependency tracking for resolved rectangles.

    0.3.0release notes

  • Opt-in operation profiles are exposed for XLSX edits and display lists, and PPTX layout, edits, and history operations.

    0.3.0release notes

  • Adds RANDBETWEEN with Excel-measured rounding behavior, volatile recalculation, and seedable evaluation through EvalContext::rand_seed.

    0.3.0release notes

  • The error now names each drifted cell's sheet.

    0.3.0release notes

  • Reads XLSX table parts and resolves structured table references, including bands, this-row shorthand, and column spans, as live formula areas.

    0.3.0release notes

  • Adds bounded, read-only structured worksheet export with formulas, stored values, formatted text, hidden-content options, anchors, and omission diagnostics.

    0.3.0release notes

  • The XLSX formula engine supports SUBTOTAL, AGGREGATE, and XMATCH, including aggregate selection, error-ignoring options, and XMATCH match and search modes.

    0.3.0release notes

  • Adds TANH to the XLSX formula engine with standard one-argument math-function coercion.

    0.3.0release notes

  • The formula engine recognizes TRANSPOSE for ranges, arrays, and scalars; blank cells transpose to zero and errors propagate.

    0.3.0release notes

  • Adds version-checked, all-or-nothing edit batches that can guard cell contents and commit inputs, formulas, number formats, and style patches as one recalculated change and undo step.

    0.3.0release notes

  • The editor API gains batch operations, commits pending drafts, nudges, and pastes first, and reports typed admission errors when input cannot be written.

    0.3.0release notes

Behavior and default changes 4

  • Array formulas evaluate once and spill across their occupied range; ranges and operators produce blocks, and array builtins and scalar functions handle block inputs.

    0.3.0release notes

  • Chart rendering is brought closer to Office across legends, labels, axes, markers, fills, and category colors; sparse charts with large cached point indexes avoid excessive allocation.

    0.3.0release notes

  • Column styles move with structural edits, affect workbook collaboration fingerprints, provide inherited cell formatting, and are restored on undo and redo.

    0.3.0release notes

  • Recalculation now advances the workbook version when exported contents change, including cycle or limit status changes and first calculations of formulas without stored results.

    0.3.0release notes

Fixes and other changes 6

  • Workbooks with a negative column width now open; the column collapses to zero width while the authored attribute remains unchanged.

    0.3.0release notes

  • Saved collaboration snapshots can be restored after open-time recalculation when the authority remains pristine; real local edits and incompatible workbook structures still prevent replacement.

    0.3.0release notes

  • RANK, RANK.EQ, RANK.AVG, and MATCH return one result per value when given a range of values.

    0.3.0release notes

  • When recalculation encounters a function outside the engine's table, it preserves an existing cached value; formulas without cached values still report an error.

    0.3.0release notes

  • Rows without explicit heights fit their content using the workbook's resolved normal font, while explicit heights and custom default heights retain their specified behavior.

    0.3.0release notes

  • Strips Excel's _xlfn. and _xlfn._xlws. prefixes before formula builtin lookup so stored post-2007 function names recalculate.

    0.3.0release notes