Commit Graph
2630 Commits
Author SHA1 Message Date
aiongg 4fd7657508 Merge PR #1068: Ribbon: more currency symbols in the Accounting Number Format menu
crates/ui-egui/src/ribbon.rs: kept main's single_area/whole_lines helpers and the PR's accounting_symbol_tests module (both appended at end of file).
2026-10-22 02:34:45 +00:00
aiongg 941da33355 Merge PR #1432: Stop BINOM.INV/CRITBINOM hanging when trials exceed 2^53 2026-10-22 02:34:45 +00:00
aiongg 522b8a1f42 Merge PR #1225: XLSX: keep a dxf's protection, font size and face, and the font parts it turns off 2026-10-22 02:34:44 +00:00
aiongg d34e3db0b8 Merge PR #949: Sheet tabs: New sheet (+) right after the last tab, the strip capped at 60%
Conflicts: docs/ui-parity.md (header change text, sheet tabs row and change log: union of both sides)
2026-10-22 02:34:44 +00:00
aiongg e51bc1ab70 Merge PR #1136: Grid: per-frame work no longer scales with the whole sheet (#1098) 2026-10-22 02:34:44 +00:00
aiongg 8e931b24b4 Merge PR #898: UI: File › Account shows the version, platform and licence, with an About GridCraft button
crates/ui-egui/tests/file_menu.rs: kept both tests (translated headings, account/About).
2026-10-22 02:34:43 +00:00
aiongg 7f9cf33bfd Merge PR #632: Header & Footer dialog opens on the saved header and footer
crates/ui-egui/tests/interaction.rs: keep both new tests
2026-10-22 02:34:42 +00:00
aiongg a3baf552a1 Merge PR #1281: N() converts a computed array element by element, so it works inside SUMPRODUCT
crates/calc/src/tests.rs: kept both tests (union).
2026-10-22 02:34:42 +00:00
aiongg 91af0c60d6 Merge PR #952: Ribbon: Font Size is a box you type into, the sizes behind its arrow
contributors/people.toml: kept both new entries
2026-10-22 02:34:40 +00:00
aiongg 7bf0c8dbd7 Merge PR #1249: Headers: mark hidden columns and rows, split cursor and double-click to unhide (#1247) 2026-10-22 02:34:39 +00:00
aiongg 4ec2de2501 Merge PR #1248: Opening an XLSX with a part over 512 MB says how to get the data in 2026-10-22 02:34:39 +00:00
aiongg 2cbd39ca8d Merge PR #1223: Sheet tabs: right-clicking a tab activates its sheet 2026-10-22 02:34:39 +00:00
aiongg 2c73c2b18f Merge PR #1214: Grid: an armed Format Painter pastes onto the next cells clicked or dragged 2026-10-22 02:34:39 +00:00
aiongg 1f1be405c1 Merge PR #1427: Recalc: an anchor's new formula no longer reads its old spill area 2026-10-22 02:34:37 +00:00
aiongg 4434e142fb Merge PR #1380: xlsx: keep every property of the default cell format when importing a file 2026-10-22 02:34:37 +00:00
aiongg ccc0e8cfe4 Merge PR #885: Row, column and freeze commands act on the sheet they are given 2026-10-22 02:34:36 +00:00
aiongg c4389fcacb Merge PR #701: Keep sheet navigation on visible worksheets at workbook boundaries 2026-10-22 02:34:36 +00:00
aiongg cedaa46916 Merge PR #1156: XLSX: [Content_Types].xml is the first zip entry, workbook parts precede document properties, so libmagic detects the file type (#1090) 2026-10-22 02:34:36 +00:00
aiongg 947930e889 Merge PR #584: Refuse inserting cells that would push values off the worksheet (#580) 2026-10-22 02:34:36 +00:00
aiongg c470450eb3 Merge PR #1091: i18n: add Polish (pl) interface, full catalog (970 labels) 2026-10-22 02:34:35 +00:00
aiongg ed4b4e1ca7 Merge PR #663: i18n: Turkish (tr) interface language 2026-10-22 02:34:35 +00:00
aiongg 0e077cfd88 Merge PR #1974: In-cell editor: a Wrap Text cell edits wrapped at the column width (#1970) 2026-10-22 02:34:35 +00:00
aiongg f55cbcd061 Merge PR #1237: BAHTTEXT: a final one after the millions reads เอ็ด 2026-10-22 02:34:35 +00:00
aiongg bd4c875225 Merge PR #884: Conditional formats: hex colours in a custom style, and no more silently empty or never-matching rules 2026-10-22 02:34:35 +00:00
aiongg 8a7f0348b6 Merge PR #1120: Open notice: do not promise to keep macros that were dropped (#1024) 2026-10-22 02:34:35 +00:00
aiongg 8041fbfc22 Merge PR #451: perf: fill-handle double-click scans a dense neighbour column ~2.4x faster 2026-10-22 02:34:35 +00:00
aiongg 91be133965 Merge PR #1114: Read date text arguments in the workbook date system (#1038) 2026-10-22 02:34:35 +00:00
aiongg 34de196c9f Merge PR #1119: Fix xlsx: combine escaped UTF-16 surrogate pairs when decoding strings (#1025) 2026-10-22 02:34:35 +00:00
aiongg a0a4b6a7d0 Merge PR #1105: Fix row keys merging distinct text rows in UNIQUE and grouping (#1012) 2026-10-22 02:34:35 +00:00
aiongg 2c22070a62 Merge PR #1060: LAMBDA helpers: #CALC! for nested arrays, #VALUE! for wrong parameter counts 2026-10-22 02:34:35 +00:00
aiongg 307b25dc92 Merge PR #488: Build: the ui-egui build script reads CARGO_MANIFEST_DIR when it runs 2026-10-22 02:34:34 +00:00
aiongg a48f418a77 Merge PR #831: i18n: test that translations keep the shape of their English 2026-10-22 02:34:34 +00:00
aiongg df39416e36 Merge PR #1115: Cap CSV import fields per record at the worksheet column limit (#1037) 2026-10-22 02:34:34 +00:00
aiongg 340ce131ef Merge PR #1340: calc: calculate long dependency chains with bounded stack 2026-10-22 02:34:33 +00:00
aiongg 136a8fa07e Merge PR #1337: Selection: whole columns and rows don't widen to merged cells 2026-10-22 02:34:33 +00:00
aiongg ec5e939677 Merge PR #1104: xlsx: keep the first group's series kind when importing a combination chart (#1014) 2026-10-22 02:34:33 +00:00
aiongg a4c53ad020 Merge PR #1061: Recalc: an array that spills as before doesn't requeue its dependents 2026-10-22 02:34:33 +00:00
aiongg 954f30f9f4 Merge PR #1058: Format Cells: take the documented camelCase style keys 2026-10-22 02:34:33 +00:00
aiongg f8f7193f52 Merge PR #1084: Data validation: a list typed without quotes is saved as a quoted list, and an unknown type is refused 2026-10-22 02:34:32 +00:00
aiongg 0288ad2f31 Merge PR #630: Cap queued pointer events from ui.click/ui.drag control requests (#525) 2026-10-22 02:34:31 +00:00
aiongg 9aed6fb534 Merge PR #1102: CSV export: check the size cap before each field, not after the row (#1023) 2026-10-22 02:34:31 +00:00
aiongg f295fa0947 Merge PR #629: Make check --json list warning messages instead of a count (#526) 2026-10-22 02:34:30 +00:00
Higgs32584andClaude Opus 5.5 06b7d09a7e clipboard: drop wall-clock timing from span test (clippy)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:28:47 -04:00
Higgs32584andClaude Opus 5.5 5392d95bf8 scripts: require workbook trust before running embedded scripts (#2178)
A workbook opened with GridCraft scripts (`_sc_scripts`) starts untrusted:
automate.runScript refuses them until the user trusts the workbook for the
session (Macros dialog > Trust Scripts, i.e. automate.trustScripts) or the
caller passes `trusted: true` for that one run. Workbooks without scripts,
and scripts written in the session, are unaffected.

Whatever the trust, a script whose steps reach outside the workbook
(file.*, link.*, or any `path` param: Get Data, From Text/CSV, Insert
Picture) is refused before any step runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:13:13 -04:00
Higgs32584andClaude Opus 5.5 b817c04a9b clipboard: bound HTML colspan/rowspan expansion (#2171)
Clipboard HTML is read only as far as the pasted text's shape (clamped
to the sheet) and at most 1,000,000 cells; colspan/rowspan are clamped
to the sheet extent before expanding, and rowspan now keeps later rows
in their columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 21:06:51 -04:00
Higgs32584andClaude Opus 5.5 836b269806 calc: cap array broadcast result size (#2182)
zip2 (binary operators, TEXT), zip3 (array IF) and MAP now compute the
broadcast cell count with checked multiplication and return #NUM! when it
exceeds MAX_CELLS, instead of allocating (abort) or wrapping on wasm32.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 20:27:26 -04:00
Higgs32584andClaude Opus 5.5 5b908c04f8 core: iterative number coercion for nested parentheses (#2180)
Parenthesised negatives were parsed by recursing once per level, so runtime
text such as REPT("(",32767)&"1"&REPT(")",32767) overflowed the stack. Strip
the parentheses in a loop, toggling the sign per level; results are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 20:24:15 -04:00
Higgs32584andClaude Opus 5.5 be94b011c5 calc: bound SUBTOTAL/AGGREGATE input work (#2175)
Every area, array and value of one SUBTOTAL/AGGREGATE call is charged against MAX_CELLS before any cell is read; past it the call returns #NUM!. A value stored in XFD1048576 no longer makes SUBTOTAL(9,A:XFD) read ~17 billion cells into a vector.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 20:10:00 -04:00
Higgs32584andClaude Opus 5.5 e1b8aad143 calc: cap LINEST-family regressor matrices (#2177)
LINEST, LOGEST, TREND and GROWTH built k x k normal-equation matrices
(plus two copies in sym_inverse, O(k^3)) with k taken straight from the
known_xs shape, so one formula could allocate gigabytes and abort on open.
More than 255 predictors is now #VALUE!, and more than 1e9 rows x k^2
multiply-adds is #NUM!, both checked before any allocation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 20:07:30 -04:00
Dylan M. Taylor 912b817abe security: enforce HTTPS on curl downloads (SonarCloud S6506) (#2188)
Add --proto '=https' to curl invocations so redirects cannot downgrade to
plaintext HTTP. Resolves SonarCloud S6506 (shell/docker/githubactions).
2026-10-21 19:36:04 -04:00