Skip to content

Current support and compatibility ​

The goal is a useful, honest initial slice. These are explicit support boundaries, not a claim of Excel parity.

AreaImplementedNot yet supported
FilesCSV text import (explicit delimiters, quoting, optional type inference); basic ZIP/OOXML .xlsx, workbook relationships, multiple worksheets.xls, .xlsb, encryption, XLSX writing, macro execution
CellsSparse A1 storage, numbers, text, booleans, blanks, errors; shared/rich/inline stringsRich text runs retain concatenated text only
Formula importOrdinary formula text, cached valuesShared/array/data-table formulas retain cached values with warnings
ReferencesRelative/absolute A1, rectangular ranges, case-insensitive cross-sheet names, quoted sheet namesNamed ranges, tables/structured references, external files, whole-column/row and 3D references
Formula syntax+ - * / ^ &, comparison operators, unary signs, postfix %, parentheses, strings with doubled quotesLocale separators, union/intersection, formula error literals, full Excel grammar
AggregationSUM, AVERAGE, MIN, MAX, COUNT, COUNTACriteria functions such as SUMIF/COUNTIF, lookup functions
Other functionsIF, IFERROR, AND, OR, NOT, ABS, ROUND, CONCAT, LEN; registry extensionsDate/time, finance, statistical, volatile and async functions
RecalculationLazy cache, dependency graph, cross-sheet calculation, cycle errorsIncremental scheduling, iterative calculation, Excel coercion/error precedence parity
ArraysFirst-class rectangular results, range argumentsDynamic-array spilling, broadcasting, implicit intersection
StylesBold/italic, explicit RGB text/fill, horizontal/vertical alignment, wrapping, number-format metadataThemes/indexed colors, borders, conditional formats, font families/sizes
Number displayGeneral, fixed decimals, grouping, percent, common currency formats (see currency)Locale-aware Excel format engine, date display, full accounting
DatesPreserve numeric serials and 1900/1904 metadata; ISO date cells remain strings with a warningJavaScript Date conversion and Excel leap-day semantics
PivotSemantic row grouping, sum/count/average/min/max, grand totalsImported XLSX pivot caches/layout, column axes, filters, subtotals, calculated measures
UISheet tabs, drag/Shift selection, arrows, resize, merge/unmerge, editing, history, responsive read-only previewFull virtualization, clipboard, fill handles, row/column insertion/deletion
PlatformsPure JS/TS headless layers, Node import smoke test, browser React demo, React SSRReact Native binding and device validation

Import warnings flag shared/array formulas, drawings, conditional formatting, validations, named ranges, external links, split panes, unsupported filter/sort variants, column-level styles, and hidden-sheet state. Row/column hiding and frozen panes are supported; entire hidden sheets are still imported as visible. Unsupported document features outside this subset may be ignored. A successful parse does not guarantee lossless document preservation. Graphical/style properties outside the listed subset are not retained. XLSX visibility is not an access-control boundary: all worksheets are imported as visible.

Coercion is intentionally limited. Numeric aggregations consider numeric values, including range values, and ignore text/booleans. This differs from Excel for literal arguments such as SUM(TRUE, "2"). Scalar arithmetic converts numeric strings, booleans, and blanks; comparisons are case-insensitive for strings but do not implement Excel's complete cross-type ordering. Logical functions use JavaScript truthiness for scalar values. ROUND is based on binary floating point and may differ at precision boundaries. Error propagation is a useful subset, not Excel's full rules. LEN uses UTF-16 code units.

Negation binds before exponentiation, and chained powers are evaluated left-to-right, following Microsoft’s operator precedence. Formula parse failures become #ERROR! in runtime values; unknown function calls become #NAME?. Bare unknown names are currently syntax errors, not named-range lookups. Cycles use Nori's #CYCLE! error. Evaluation resource bounds use #NUM!.

The editor displays [array] for array-valued cells and exposes arrays to custom renderers. It supports roving cell focus and arrow navigation, but does not claim full Excel keyboard or ARIA grid parity.

Imported layout and saved views ​

  • Explicit column widths, row heights and worksheet defaults are preserved in logical units. Column conversion assumes a seven-unit maximum digit width; it is approximate for nondefault fonts. See Microsoft's column width definition. Row heights use a 96-unit-per-inch coordinate convention. Font measurement and automatic row-height fitting are not implemented.
  • Merged cells, wrap text, and vertical alignment are imported. Explicit row heights control wrapping; the renderer clips overflow rather than expanding an imported row unpredictably. Single-cell/overlapping merges and nonempty covered cells are rejected as invalid canonical data.
  • Frozen and frozen-split panes with integer row/column counts are supported. Ordinary split panes and the saved scroll origin are not reproduced. Leading frozen cells use sticky placement; a merge spanning a freeze boundary scrolls as one cell on that axis.
  • Hidden rows/columns are omitted without renumbering addresses. Hidden sheets remain visible and receive a warning. Hidden state is presentation metadata, not access control.
  • Worksheet AutoFilter value lists (including blanks) and one/two custom comparisons with AND/OR are supported. Equality supports *, ? and ~ escapes. Date grouping, dynamic/time-relative, top-N, color and icon filters receive warnings; their saved hidden-row state is retained. Supported criteria additionally filter current calculated values. Excel table-level filters/sorts are not imported and receive a warning.
  • Value-sort metadata and direction indicators are preserved. XLSX stores its saved sorted data in worksheet order, which Nori retains. Import does not apply the sort a second time. Interactive sort/filter editing menus, re-sorting after cell edits, left-to-right sorting, and color/icon/custom-list sort semantics are not implemented.

CSV import has its own format and inference contract. CSV export is not implemented.

Nori 0.2.0 · Initial milestone · Explicit compatibility boundaries.