- Unit tests on Python 3.15.0 and 3.11.17: 866 pass on each, 9 are known differences from Excel, 0 fail.
- In the browser: 10 of 10 end-to-end suites pass, among them several people editing one workbook, VBA macros and UserForms.
- In Microsoft Excel for Mac 16.114 (build 26101123): 442 of 442 VBA language and library cases; 150 of 158 object-model scenarios; 30 of 30 UserForm descriptions; 20 of 20 UserForm event steps; 18 of 18 form-designer descriptions; 89 of 89 file and formula checks gave the same answer as in ReflexGrid.
- Overall: ReflexGrid matched Microsoft Excel for Mac 16.114 (build 26101123) in 749 of 757 published comparison cases (98.9%). These cases cover what the checks exercise, not every Excel feature or workload.
ReflexGrid’s tests run on GitHub Actions for every change, on a clean Linux machine. Many of them compare ReflexGrid with answers recorded from Microsoft Excel and kept in the repository (tests/*_expected.json), so anyone can check them. Excel can’t run on that machine, so the checks in Excel itself run on a Mac with Excel, and their latest results are published with this page. The page is written by the test run (scripts/compat_report.py) each time main changes.
- Commit: 80af29f
- Tested: 2026-10-15 (UTC), Ubuntu 24.04.5 LTS, Python 3.15.0
- Also tested: Python 3.11.17: 866 passed, 9 known differences, 0 failed
- Test run: GitHub Actions
Unit tests
| Area | What is checked | Passed | Known differences | Failed |
|---|---|---|---|---|
| VBA language and library | Expressions, conversions, strings, dates, Format, arrays, On Error, classes… against 457 answers: 444 recorded from Microsoft Excel for Mac, 13 that follow Excel for Windows where Excel for Mac lacks the feature |
458 | 0 | 0 |
| Excel object model from VBA | Range, Worksheet, Application, tables, filters, names, formats… against 158 answers recorded from Microsoft Excel |
151 | 8 | 0 |
| UserForms | Form designs in .xlsm and .frm/.frx files, the Forms object model, events and their order, against 68 answers recorded from Microsoft Excel |
35 | 0 | 0 |
| Macros and event macros | The macro.* commands, VBA functions in formulas, Worksheet_Change and other events, MsgBox/InputBox, undo, the sandbox |
47 | 0 | 0 |
| .xlsm files and VBA projects | Compound files, MS-OVBA compression, vbaProject.bin and .xlsm packages, read back with openpyxl |
17 | 0 | 0 |
| Formulas, functions and number formats | Values and coercion, dates, the formula language, every worksheet function with hostile arguments, number formats as Excel shows them | 50 | 0 | 0 |
| Engine and .xlsx files | Commands end to end: editing, recalculation, undo, clipboard, structure, formatting, sort and filter, tables, names, .xlsx round trips |
57 | 0 | 0 |
| Editing together | Several people on one workbook, undo that takes back only your own changes, the shared workbook store | 28 | 0 | 0 |
| Third-party VBA: VBA-JSON’s own specs | The spec workbook of VBA-JSON (MIT), written for Excel by its authors: ReflexGrid opens the published .xlsm and runs its own suite, one test per spec |
23 | 1 | 0 |
| All unit tests | 866 | 9 | 0 |
Known differences from Excel
These cases give a different answer from Excel’s, on purpose or for now; the tests expect it (KNOWN in tests/test_vba_object_cases.py and tests/test_third_party_vba.py).
- should convert dates to ISO 8601: VBA-JSON converts local time to UTC with Windows API calls (GetTimeZoneInformation in kernel32), which ReflexGrid’s macro sandbox doesn’t allow (error 445)
- date and time value, long digit string, general text of numbers: Range.Text of General numbers (and ####) depends on the column’s width in Excel; ReflexGrid shows up to 11 characters
- formula normalised: ReflexGrid doesn’t keep the spaces typed inside a formula (= 1 + 2 becomes =1+2)
- positions: Excel for Mac measures columns in its own points (default width 10, 65 pt); ReflexGrid uses Excel for Windows’ (8.43, 48 pt)
- ColumnWidth: Excel for Mac measures columns in its own points (default width 10, 65 pt); ReflexGrid uses Excel for Windows’ (8.43, 48 pt); for columns of different widths ReflexGrid answers Null, as Microsoft documents
- RowHeight: for rows of different heights ReflexGrid answers Null, as Microsoft documents (Excel for Mac answers the first row’s)
- SpecialCells: the same cells, split into different areas
In the browser
End-to-end suites drive the real app with Playwright (headless Chromium), one job per suite (testcases/).
| Suite | What it checks | Result |
|---|---|---|
smoke_home |
A workbook loads: ribbon, formula bar, grid headers, sheet tabs, status bar, title bar (title, save status, who is here); no console errors | Passed |
editing_formulas |
Typing values and formulas, recalculation, formula bar, autocomplete, AutoSum, fill handle, undo/redo, copy/paste | Passed |
formatting_ribbon |
Bold, fill colour, number formats, merge, borders, Format Cells dialog, column resize | Passed |
sheets_data |
Sheet tabs (add/rename/switch), sort, filter dialog, tables, conditional formatting, charts from samples, dragging a chart and a picture (they move without resizing; one undo per drag) | Passed |
insert_tab |
The Insert tab button by button: every chart kind of the chart menus and All Charts, sparklines of each type, links (ScreenTip on hover, Ctrl/Cmd+click), comment threads (post, reply, resolve) and notes shown on hover, a cell holding a note or a comment but not both, Insert Function, a table and a picture | Passed |
xlsx_roundtrip |
Upload an .xlsx built with openpyxl, check what renders, download it again and re-read it with openpyxl | Passed |
collab_live |
Three people on one workbook: presence, each other’s selections and typing, edits and formulas reaching everyone, change highlights, per-person sheets, per-person undo, the shared title, jumping to someone, leaving and closing a tab | Passed |
workbook_manager |
The workbook list: who is editing, a new workbook and its title, search and filters, uploading, downloading, deleting a workbook someone has open | Passed |
vba_macros |
Excel macros: the Developer tab and VBA editor, F5 with MsgBox/InputBox answers, a VBA function in a formula, one undo for a run, the Macros dialog, event macros behind the security bar, stopping a long macro, downloading .xlsm and opening it again |
Passed |
vba_userforms |
UserForms: an .xlsm with forms (built by the suite) opened in the browser; a modal form filled in (typing, a drop-down list, a check box, a KeyPress handler, a MsgBox over the form, OK writing the cells, Esc as Cancel), a modeless form beside the grid, the VBA editor’s form view (double-click for an event procedure, Run Form), designing a new form (Toolbox, Properties window, moving a control, its code, running it), the forms kept in the downloaded .xlsm, and the editor staying light in a dark-mode browser |
Passed |
Checked in Microsoft Excel
These checks run ReflexGrid’s output in Microsoft Excel itself: Excel opens the macro-enabled workbooks and the files ReflexGrid writes, runs the same VBA, describes the same UserForms, and its answers are compared with ReflexGrid’s (scripts/excel_vba_oracle_mac.py --all --record, scripts/excel_check_mac.py --record). They need Excel, so they run on a Mac rather than in CI, and each row says when and on which commit it last ran.
The checks ran on commit 3758c56, in Microsoft Excel for Mac 16.114 (build 26101123) on macOS 15.3.1, 2026-10-15. This report is for commit 80af29f, 1 commit later (changes). Nothing the checks depend on (the engine, the test cases, the check scripts) changed since, so their results hold for this commit too.
| Check | Same answer as Excel | Differences | Not compared | Last run |
|---|---|---|---|---|
| VBA language and library: each expression and function evaluated by Excel’s VBA and by ReflexGrid’s | 442 of 442 | 0 | 2 | 2026-10-15, 3758c56 |
| Excel object model: each scenario run as a macro by Excel and by ReflexGrid, comparing what it answers and the cells it leaves | 150 of 158 | 8 | 2026-10-15, 3758c56 | |
| UserForms ReflexGrid wrote, loaded by Excel, which describes each form and control (type, position, size, caption, value, lists, fonts…) as ReflexGrid does | 30 of 30 | 0 | 2026-10-15, 3758c56 | |
| The events a form’s code fires, and their order, in Excel and in ReflexGrid | 20 of 20 | 0 | 2026-10-15, 3758c56 | |
| Forms made and changed with ReflexGrid’s form designer, loaded and described by Excel | 18 of 18 | 0 | 2026-10-15, 3758c56 | |
| Workbooks ReflexGrid wrote: opened by Excel, their values, formulas and displayed text read there, saved by Excel, and Excel’s files recalculated by ReflexGrid to Excel’s results | 89 of 89 | 0 | 15 | 2026-10-15, 3758c56 |
- VBA language and library: 2 not compared, because Excel for Mac names the type of an array V() where Excel for Windows says Variant(); ReflexGrid follows Windows.
- VBA language and library: 13 not run on the Mac, because they use what only Excel for Windows has (CDec, Scripting.Dictionary, non-ASCII source); their expected answers follow Windows.
- Excel object model, the differences: date and time value, long digit string, general text of numbers, formula normalised, positions, ColumnWidth, RowHeight, SpecialCells (the known differences above).
- Workbooks ReflexGrid wrote: 15 not compared, because they use functions this Excel lacks (IFS, XLOOKUP, SEQUENCE, TEXTJOIN, LET).
Every difference, with Excel’s answer and ReflexGrid’s, is in excel-oracle.json.
Download
- This report as JSON
- The checks in Microsoft Excel, with every difference (JSON)
- Unit test results, Python 3.15 (JUnit XML)
- Unit test results, Python 3.11 (JUnit XML)
Limits
What ReflexGrid doesn’t do yet (pivot tables, Power Query, controls placed on sheets, macro recording, a VBA debugger, anything outside the workbook from a macro) is listed in Excel macros (VBA) and the README’s FAQ.
Cite this report
Milo Chen and contributors (2026). ReflexGrid Excel compatibility report, commit 80af29f, 2026-10-15. https://milochen0418.github.io/reflex_grid/compatibility.html
To quote the result: ReflexGrid matched Microsoft Excel for Mac 16.114 (build 26101123) in 749 of 757 published comparison cases (98.9%). These cases cover what the checks exercise, not every Excel feature or workload.
For the software itself, see CITATION.cff (GitHub’s Cite this repository).