V4 V5

5.2.0 — 2026-10-22

Added

AreaWhat
RenderingDirect2D drawing for WinForms (Renderer = GridRenderer.Direct2D). Draws on the GPU and lays text out with DirectWrite; a full repaint while scrolling is about 3.5× faster than GDI+. The in-cell editor, auto-fit and text overflow measure with the same renderer. Where it cannot run, the control stays on GDI+ (ActiveRenderer). The native DLLs (x64 / x86) ship in the package
RenderingWinForms RenderToBitmap — draws the view into an image with the current renderer, no window needed
XLSXShared formulas (t="shared") are expanded on load, so every cell carries its own formula (saved as ordinary formulas)
Number formatsElapsed time [h] [mm] [ss], the currency symbol of a locale tag ([$¥-411] and the like), digit groups separated by literals (000-0000 and the like), and mmmmm (the first letter of the month)

Improved

AreaWhat
PerformanceFaster WPF drawing: the text of cells whose value did not change is no longer laid out again every frame (scrolling a 1400×900 view, the UI-thread time per frame went from about 10 ms to about 1.5 ms)
PerformanceFaster Avalonia drawing, the same way (25.7 ms → 4.9 ms per frame for a 100-row × 20-column view)
PerformanceFaster drawing of numbers that change every frame on Direct2D and WPF. A number in General format was laid out again for every rounding tried to fit its column; the width of text made only of digits and number signs now comes from a per-font table of character widths (all 1,160 cells visible at 2560×1440 changing every frame: Direct2D 24.9 ms → 9.1 ms, WPF 45.0 ms → 27.4 ms)
PerformanceOn sheets with many merged cells or cell types, the cost of drawing grew with the number on the whole sheet; it now depends only on what is in view
PerformanceFaster value writes in a workbook with several sheets and no formulas (3 sheets × 2 million cells: 48.6 ms → 22.4 ms)
PerformanceIn a workbook with many formulas, a full recalculation (at the end of a load, after a sort, on undo) took time that grew with the square of the number of formulas; it no longer does
PerformanceIn a cell with long text, finding the caret position from a click slowed down with the square of the length (a 32,767-character line could freeze for more than ten seconds)

Fixed

AreaWhat
DisplayA number too wide for its column spilled into the next cell. As in Excel, a number in General format is now rounded to the digits that fit (scientific notation if even the integer part does not), and a formatted one shows ####
DisplayA merged cell whose top-left lies outside a pane was blank where it was visible (a vertical merge scrolled past its top, a merge across the frozen columns or rows)
WinFormsDrawing repeatedly onto the same Graphics with RenderTo / RenderFrame compounded the scale, and at 150% threw OverflowException after a few dozen frames
Data validationIn a workbook opened virtualized (XlsxReader.OpenVirtual), a list rule whose options come from a sheet not shown yet (such as a “lists” sheet) or from rows off screen had no options: its ▼ opened nothing, and no value passed the rule, so the edit could not be committed
VirtualizationIn a workbook opened virtualized, sorting, undo, multi-range copy and Replace All treated rows not loaded yet as empty: sorted or replaced values were overwritten when those rows loaded, and undo could erase the file’s values. A merged cell whose top-left row was above the view was drawn blank. Each now loads the rows it needs first. Formulas, conditional-format statistics, filters and row/column insert or delete still do not see rows not loaded yet — call MaterializeAll() before editing (Large data)
DisplayText too wide for its cell (stopped by a neighbouring cell, or in a merged cell) was shortened with ”…”. As in Excel, it now keeps its alignment and is clipped at the cell edge: left-aligned text shows its start, right-aligned its end, centred its middle. WinForms (GDI+ / Direct2D), WPF, Avalonia and PDF alike
Data validationA rule with its error alert turned off (ShowErrorMessage = false, or no showErrorMessage in an xlsx) rejected an invalid entry without saying so, leaving Esc as the only way out of the editor. As in Excel, such an entry is now accepted
WinFormsThe list of a dropdown cell or a list validation rule could be cut off at the edge of the grid. As on WPF and Avalonia, it now opens in a popup, above the cell when there is no room below on the screen
DisplayA merged cell showed the borders of the cells it covers as a grid inside it (in an xlsx, every cell of a merged range often carries its own borders). As in Excel, a merged cell now draws only its outer borders, in PDF and print too
XLSXIn a loaded workbook, editing a value did not recalculate the formulas that refer to it (on the same sheet or another). The formula dependencies are now registered at the end of the load; what is shown stays the file’s cached values. A workbook opened virtualized registers them after MaterializeAll()
XLSXLoading: built-in number format IDs 41–43 (thousands separator, accounting) are resolved. A row without an r attribute is read as the one after the previous row. ISO 8601 date cells (t="d") are read. A workbook with overlapping merged cells opens. A <pageSetup> without paperSize is read as Letter (the OOXML default), a font with no colour (automatic) as black, a column of width 0 as hidden, and medium dashed borders (mediumDashed and the like) as dashed lines of weight 2
XLSXSaving: functions newer than Excel 2007 are written with the _xlfn. prefix. _xHHHH_ escapes are read and written, so a cell holding control characters can be saved. A " in the options of a list validation rule is escaped. A cell in a circular reference is written with the cached value 0, as Excel does. Formatted cells without a value (a filled header, input cells formatted in advance) and formulas without a cached result were lost on save. Formatted cells without a value are now saved to reogrid-json too
VirtualizationIn a workbook opened virtualized, a sheet with rows lower than the default showed a blank lower part right after opening, until the next repaint. Row heights and hidden rows now apply from the moment the sheet opens. Find in formulas missed formulas in rows loaded later. Repainting right after the workbook was closed threw for a sheet not shown yet
FormulasResults now match Excel. A formula that refers to an empty cell returns 0. 0^0 returns #NUM!, 0^-1 returns #DIV/0!, and a result beyond the range of a double returns #NUM!. Cancellation in the last addition or subtraction of a formula gives 0 (=924081.39+3604900.09-759790.51-3769190.97 is 0). Rounding in the ROUND family and in CEILING FLOOR MROUND. NaN and ∞ from math functions become error values. A date function given an out-of-range serial returns #NUM!
FormulasFunction arguments and lookups now follow Excel’s rules. Lookups in VLOOKUP HLOOKUP MATCH XLOOKUP INDEX. A COUNTIF-family criterion no longer matches a value of another type. COUNT counts logical values and numeric text written directly as arguments. AND OR XOR accept ranges. An argument that takes a range returns its error if it is one. SEARCH uses wildcards, and PROPER capitalizes at Excel’s word breaks. A character escaped with ~ in a wildcard pattern matched anything. Argument handling in LEFT RIGHT SUBSTITUTE CHAR ISEVEN ISODD
FormulasA formula that reads its own cell (=A1+1 entered in A1, for example) is detected as a circular reference (#CIRCULAR!). Function names with the _xlfn. prefix resolve to the function itself. A formula using a name broken by deleting its range returns #REF! instead of #NAME?. Renaming a sheet by case alone also rewrites the sheet name in references. Deleting rows or columns could erase the formula text of a formula that moved up into their place. A long chain of operators, and edge arguments to RANDBETWEEN and REPT, threw or ran out of memory
Number formatsThe text section (@, the fourth section), a comma just before the decimal point (scaling by 1,000), colour and condition brackets in either order, and an empty negative section (negative values shown as nothing) now behave as in Excel. Decimals are rounded on the value’s 15 significant digits. A negative zero showed as -0 in General format. A number with an explicit General or @ format showed #### when too wide for its column; it is now rounded like an unformatted number
InputIn the in-cell editor and the formula bar, 50% is entered as 0.5 (with a % format), 2026/10/21 and 2026-10-21 (optionally with a time) as dates, and 13:45 as a time. A leading ' marks the entry as text and is not stored. A cell formatted as text (@) keeps what was typed as text. TRUE / FALSE become logical values on every input path, and NaN Infinity 1e400 stay text. A float passed to SetObjectValue is stored as written (0.1f used to become 0.100000001490116)
EditingClearCell (the Delete key, Clear Contents, the source of a cut) also removed the cell’s fill and bold. As with Excel’s Clear Contents, it now removes the value and formula and keeps the formatting
EditingThe in-cell editor treats a surrogate pair (an emoji, for example) as one character. Moving a reference frame while editing a formula keeps the $ of absolute references. While editing a formula, a reference to another sheet got a frame on the sheet being edited. Word-by-word drag selection carried on after the text was edited. A line that fits exactly up to a space pushed its last word to the next line
SelectionThe arrow keys and Shift+arrow keys stopped on hidden rows and columns
Rows & columnsInserting or deleting rows and columns also moves formatted cells without a value, each column’s AutoFilter criteria, and the references in formula rules of conditional formats. Deleting every row (column) left a sheet of 0 rows and crashed; as in Excel, the sheet now keeps its size and is emptied. A negative position or count throws ArgumentOutOfRangeException before anything changes. On a sheet widened past 16,384 columns by inserting columns, borders and merged cells could be drawn in the wrong place. On a sheet where deleting columns left only frozen columns, drawing threw
UndoUndoing a row or column deletion also restores the AutoFilter range, its criteria and the rows it hid, and the outline groups removed with the deletion. Recording a paste that runs over the edge of the sheet threw
FiltersRows hidden by AutoFilter are always shown again, including when they lie outside the used range and when the filter is removed. A percentage in a condition filter, such as 100%, is compared as a number
Conditional formatsTop/bottom, average, color scale, data bar and icon set rules apply only to cells holding numbers. After a rule was deleted, the rules behind it were judged on another rule’s statistics
Merged cellsA formula cell that disappears into a merge is removed from the formulas, and the formulas that referred to it recalculate. Merging a range that runs off the sheet, or several ranges one of which cuts an existing merge, is refused before anything changes. Copying and pasting an empty merged cell keeps the merge
AutoFillIn a column mixing values and formulas, formula references are still shifted to the destination. A cell with a time-only format advances by one hour, as in Excel. A target range past the edge of the sheet is filled up to the edge. A target that extends in more than one direction writes nothing
OutlineA group refused for being too deep took the existing groups with it. Removing a group re-levels the remaining ones. A group that runs off the sheet is refused
ClipboardCopying a range that runs off the sheet, and pasting beyond its edge, threw
WorksheetAn empty sheet name, and a duplicate that differs only in case, are refused. A negative row or column index, and a negative, NaN or infinite row height or column width, throw ArgumentOutOfRangeException (loading an xlsx or reogrid-json skips such values)

5.1.0 — 2026-10-16

Added

AreaWhat it brings
Input and protectionData validation, cell notes, sheet protection (per-cell locks)
DataFind and replace, multi-range selection
TablesExcel’s “Format as Table” (Tables). 60 built-in styles; row and column stripes, first- and last-column emphasis, totals-row colouring
StylesBanded rows; text rotation, stacked text and indent are drawn; a range-style API (where a row and a column style cross, the one applied last wins, as in Excel)
Number formatsJapanese era dates, fractions and scientific notation
Formulas149 functions (27 new): SUBTOTAL AGGREGATE XLOOKUP XMATCH INDIRECT ADDRESS WORKDAY NETWORKDAYS WEEKNUM JIS ASC and more (Functions)
PrintingPrint titles, headers and footers
PDFOnly the characters a document uses are embedded from the Japanese font (a PDF with Japanese text drops from about 4 MB to tens of KB). Japanese bold and italic are synthesized, as Excel does
XLSXXlsxColumnWidths.MaxDigitWidthMeasurer converts column widths using the Normal font’s digit width as measured on screen. Pass GdiTextMetrics.MaxDigitWidth on WinForms, or XlsxColumnWidths.ExcelMaxDigitWidth (the built-in table looked up at the screen’s DPI) on WPF and Avalonia, and an opened workbook’s columns come out as wide as Excel draws them on the same screen
DrawingEastAsianText: the rule for Japanese and other East Asian characters a cell’s font lacks, so a custom drawing layer can match the three built-in ones
Savingreogrid-json keeps freeze panes, zoom, hidden sheets, tab colours, page setup and images. XLSX round-trips the auto-filter, sheet protection, data validation, notes, tables and view state
LicensingDevelopment-device license activation. Each newly issued Professional key is assigned to one development device; keys you already have keep working as-is. Running ReoGrid in a development environment requires authentication with a license key, which you can download from the customer portal

Fixed

AreaFix
XLSXOpening a file made in Excel and saving it untouched changed its column widths (default-width columns got wider; hand-set widths moved by a pixel)
FormattingBorders and number formats could not be applied to cells outside the used range
EditingThe in-cell editor painted itself white, even over a filled cell
DisplayOn very short rows, row-header numbers overlapped the neighbouring rows
XLSXLazy loading for large files (OpenVirtual) left out pictures, notes, tables, conditional formats, data validation, the auto-filter, sheet protection, page setup and headers/footers — and saving such a workbook lost them
XLSXOpened workbooks had narrower columns than in Excel: about 12% for workbooks whose Normal font is Yu Gothic, MS PGothic and the like (now as wide as in Excel at 100 %, with no setup). The remaining 5% or so at 150% display scaling goes away once XlsxColumnWidths.MaxDigitWidthMeasurer is set
DisplayIn cells whose font has no Japanese (Arial, say), Japanese text was drawn about 10% larger than in Excel on WinForms, and in a different face on WPF and Avalonia. It now uses MS Gothic at the cell’s own size, as Excel does
DisplayText overflowing into a neighbour that stops it was cut short with ”…” where Excel fits it (it now runs up to the cell that stops it)
EditingOpening a cell’s editor and leaving it without a change made the row shorter. Committing a single line of text also left the row below its default height
EditingOn WPF, double-clicking a cell to edit it selected everything from the click to the end of the text. All three controls now start editing with the caret where the double-click landed (WinForms and Avalonia used to start at the end)

5.0.0 — 2026-08-19

The first stable release of V5 (ReoGrid One). There is no backward compatibility with V4 (Differences from V4).

Highlights

AreaWhat it brings
MemoryFully virtualized. About 16-23 B per cell; empty cells cost nothing
StylesFour-level inheritance (Cell ◁ Row ◁ Column ◁ Sheet); identical formatting is shared automatically
Formulas122 functions, dependency recalculation, cross-sheet references, defined names
Number formatsExcel format codes (sections, conditions, colors)
Cell typesSix (checkbox / dropdown / progress / button / hyperlink / sparkline)
Conditional formattingThe full OOXML set, icon sets included
DisplayHigh DPI, freeze panes, zoom; only the visible area is drawn
EditingAn in-cell editor with IME and formula highlighting
DataSorting (multi-key), filtering (value lists and conditions), auto-fill, outlines, undo
I/Oreogrid-json, CSV, XLSX (streaming), PDF
PrintingA UI-independent pagination engine shared by PDF, WinForms and WPF
PlatformsWinForms / WPF / Avalonia, plus headless

Packages

unvell.ReoGrid.One / .One.Wpf / .One.Avalonia / .One.Core (Installation)


Planned

Features not implemented today. Each will get its documentation page when it ships.

Under consideration

FeatureNotes
ChartsNeeds a floating-object foundation first
Shapes and text boxesImages are already supported
Data bindingTo be redesigned around the headless core
Threaded commentsThe classic note is already supported
More cell typesDatePicker / RadioButton / NumberInput / image types

Known limitations

AreaLimitation
FormulasDynamic arrays (spill) — FILTER SORT UNIQUE SEQUENCE LET LAMBDA
FormulasLocalized function names; PHONETIC
PrintingManual page breaks; printing only part of the print range
XLSXBanded rows, split (unfrozen) panes
UndoOutline operations
AvaloniaPrinting (use PDF export instead)

Each limitation is also noted on the page that covers the feature.


Licensing

Keys already issued for V4 work in V5 unchanged — no re-issue needed (Applying a License Key).

Was this article helpful?