What's Changed
- Ribbon: Font Size value is centered in its box (fixes #3155) by @kenkanuma in #3161
- Data validation and conditional formats: anchor relative formulas on the top-left cell of all areas (#3152) by @ljkx in #3173
- Ribbon test: pin macOS for the AutoSum tooltip, so it passes on a Mac by @Aimarmndz in #3179
- Charts: decimate area top and baseline at paired horizontal indices by @neilcawse in #3132
- check: find volatile defined names with a worklist instead of repeated passes by @dylanmtaylor in #3187
- Protection: authorize the sheet a column move changes; refuse edits that unlock locked cells by @dylanmtaylor in #3196
- xlsx: rename repeated table headers without retrying handed-out suffixes by @dylanmtaylor in #3213
- XLSX: write the XLDAPR extension URI in lower case next to in-cell pictures (part of #2339) by @hectorviov in #3217
- PivotTables: dense rank ties and the "Count of" caption for Count Numbers (part of #1448) by @hectorviov in #3219
- Open a web page's table as a sheet, also when it is named .xls (fixes #3166) by @hectorviov in #3223
- XLSX: checkboxes no longer make Excel repair the file (fixes #2630) by @hectorviov in #3225
- Ctrl+. moves to the next corner of the selection (fixes #1442) by @hectorviov in #3226
- XLSX: write page margins as their decimals (part of #1609) by @hectorviov in #3228
- XLSX: keep a workbook's R1C1 reference style through open and save (part of #2809) by @hectorviov in #3234
- Frozen panes: frozen columns keep their text, gridlines and borders while scrolling (#2544) by @adifiedio in #3237
- Show or hide a workbook's sheet tabs and scroll bars (fixes #3101) by @hectorviov in #3239
- Charts and macro examples unquote sheet names as formulas do (fixes #2012) by @hectorviov in #3243
- A linked cell's menu edits, opens or removes its link (fixes #2120) by @hectorviov in #3244
- Key tips: Excel 2003 menu access keys (Alt+I, R; Alt+D, S; …) (#941, #2311) by @hectorviov in #3250
- Clipboard: paste a picture from the system clipboard at the active cell (#699) by @adifiedio in #3251
- Open SYLK (.slk) files: values, R1C1 formulas, number formats, widths (#1481) by @hectorviov in #3253
- Find and Replace: search only the selected range (#3224) by @hectorviov in #3254
- Point mode: dragging over row or column headers extends the reference by @Morzilla in #3267
- Options: highlight the active cell's row, as a global preference by @Morzilla in #3268
- Drag and drop asks before replacing data (fixes #3136) by @hectorviov in #3216
- GROUPBY: total depth 2 or more adds subtotals (part of #1456) by @hectorviov in #3221
- Draw: the live pen stroke is drawn as the ink it commits (fixes #1786) by @hectorviov in #3229
- Copy quotes only cells with a tab or line break, as Excel does (fixes #2225) by @hectorviov in #3231
- XLSX: keep "remove personal information on save" and honour it (part of #3089) by @hectorviov in #3238
- Paste Special: every option has its Excel access key (fixes #1482) by @hectorviov in #3240
- xlsx: repair repeated sheet names through a set of assigned names by @dylanmtaylor in #3211
- PDF export: wrap text with running widths by @dylanmtaylor in #3208
- engine: PivotTable filters test each record against a set of selected labels by @dylanmtaylor in #3279
- check: charge relationship parts to the package's decompression budget by @dylanmtaylor in #3185
- calc: cap the text one & over arrays may build in all by @dylanmtaylor in #3189
- calc: list each dependent once when a change spreads by @dylanmtaylor in #3190
- Security: MODE counts through an index, FREQUENCY bins by binary search by @dylanmtaylor in #3198
- ods: charge a cell's text when the cell is read, not when its row ends by @dylanmtaylor in #3257
- functions: NUMBERVALUE strips trailing percent signs in one pass by @dylanmtaylor in #3262
- functions: match TEXTSPLIT/TEXTBEFORE/TEXTAFTER delimiters through an index, within a work limit by @dylanmtaylor in #3263
- engine: weekday fill series moves by whole weeks by @dylanmtaylor in #3272
- engine: cap header and footer sections at 64 KiB when fields expand by @dylanmtaylor in #3284
- chart, numfmt: treemap rows grow in constant time per item; General fit clamps its width by @dylanmtaylor in #3290
- engine: protection checks for filter, outline, row/column size, picture, pivot and edit-range paths by @dylanmtaylor in #3296
- chart: series without values take no span entries in cartesian rendering by @dylanmtaylor in #3300
- ui-egui: formula reference colouring in linear time; bounded fill-character repeats by @dylanmtaylor in #3311
- formula, calc: bounded LET/LAMBDA name lookup; ragged array literals refused before reserving by @dylanmtaylor in #3312
- Pass the Linux signing key to the release workflow by @dylanmtaylor in #3380
- XLSX: the XML element cap counts only elements kept in the tree by @RedBearAK in #2527
- link: require confirmation for programmatic link.open (#2181) by @Higgs32584 in #2203
- Form controls: buttons, sliders and spin buttons, with Assign Action, Format Control and XLSX round trip by @prxnvt in #481
- About: credits tables fit without side-scrolling and their columns resize by @FredApps in #3320
- Charts: draw every doughnut series as a ring by @alosslessdev in #1827
- UI: RefEdit follow-ups: a dialog keeps the sheet it was opened on, a click on the selected cell picks, quoted sheet names in Solver by @prxnvt in #3180
- Web: page host mode, so a page can host GridCraft in its own document (#2592) by @helenkwok in #2593
- i18n: German context menus' Insert reads "Zellen einfügen", not a second "Einfügen" (#2874) by @ZIDAN44 in #3425
- fix(calc): apply "Set precision as displayed" in calculation by @Harrison-Booth in #1366
- Paste of a whole-column or whole-row copy no longer aborts the app by @Harrison-Booth in #2018
- xlsx: stop memory amplification from declared sizes (#2173) by @Higgs32584 in #2197
- Copy the shared house rules into AGENTS.md by @FredApps in #3487
- Sort: the closed Sort by box names the column, as its list does (#3446) by @ZIDAN44 in #3506
- View: a sheet keeps its own scroll position when sheets move (#3485) by @ZIDAN44 in #3507
- Selection: Ctrl+Shift+Arrow searches the active cell's line (#3484) by @ZIDAN44 in #3508
- gridcraft-web: window.gridcraft, the page command API from craft-web-api by @helenkwok in #3524
- contributors: set names for vangel76 by @vangel76 in #3331
- fix(autosum): stop the guessed range at a blank cell by @vangel76 in #3309
- perf: select instead of sort in MEDIAN, PERCENTILE, QUARTILE, LARGE, SMALL by @vangel76 in #2686
- calc: rebuild the dependency graph from shared syntax trees by @vangel76 in #2693
- Charts: one combo plot-kind function, no dead scale helpers (#1146) by @vangel76 in #1150
- fix(chart): pass series index to data-table keys by @FredApps in #3547
- fix(edit): paste, Ctrl+Enter, Fill and Copy skip rows a filter hides (#1101) by @richard1912 in #1175
- Formulas: adjust_if_changed reports when a structural edit leaves a formula alone by @vangel76 in #3579
- Structural edits rewrite only the formulas they change by @vangel76 in #3591
- Move whole rows when inserting or deleting rows and columns by @vangel76 in #3581
- Cache formula trees when a workbook is read from JSON by @vangel76 in #3578
- perf(calc): SUM/COUNT/AVERAGE over big ranges reuse constant-only results by @vangel76 in #2691
- Tabs: Ctrl-click on the sheet arrows jumps to the first or last sheet by @vangel76 in #3383
- BINOM.DIST, POISSON.DIST: Loader mass and recurrence sums, error 1e-11 -> 1e-14 (#3324) by @vangel76 in #3325
- Charts: work and memory are bounded by series x points; ranges are clipped before evaluation (#1147) by @vangel76 in #1155
- Charts: label fitting and legend measuring avoid hundreds of text layouts per render (#1149) by @vangel76 in #1152
- Equations: refuse macro definitions and cap matrix cells by @vangel76 in #3297
- Math: count \newline as a row break in the matrix cell cap (#3327) by @vangel76 in #3328
- perf(calc): index spill areas so cell and range reads don't scan every spill by @vangel76 in #2694
- perf(calc): find formulas a cleared cell may unblock from a set of #SPILL! cells by @vangel76 in #2696
- Updates: the updater reports installing, ready, installed and failed, and installs at exit by @dotCooCoo in #3621
- Updates: take craft-update from craft-libs main at 1b34eba41 by @dotCooCoo in #3641
- Sheets with a million hidden rows or whole-column conditional formats scroll and redraw smoothly again by @vangel76 in #3629
New Contributors
- @kenkanuma made their first contribution in #3161
- @ljkx made their first contribution in #3173
- @hectorviov made their first contribution in #3217
- @adifiedio made their first contribution in #3237
- @Morzilla made their first contribution in #3267
- @FredApps made their first contribution in #3320
- @ZIDAN44 made their first contribution in #3425
Full Changelog: v0.16.0...v0.18.0