Commit Graph
922 Commits
Author SHA1 Message Date
aiongg 77b861392a Merge PR #1299: Filter: count empty text and ="" results as (Blanks) 2026-10-22 02:35:26 +00:00
aiongg 10746f8e33 Merge PR #1614: XLSX: a note keeps its box's place and size through open and save (#1608) 2026-10-22 02:35:24 +00:00
aiongg d691e95f6d Merge PR #1285: Remove Duplicates, Filter and Subtotal: a Sheet! prefix on the range works on that sheet 2026-10-22 02:35:24 +00:00
aiongg 87df1947f9 Merge PR #1284: Sort: a Sheet! prefix on the range sorts that sheet, not the active one 2026-10-22 02:35:21 +00:00
aiongg d26bbe3432 Merge PR #1085: Format: Row Height and Column Width say pixels, and take points like the reference app
Conflicts:
- crates/engine/src/cmd/format.rs: spec strings keep #885's sheet?/Sheet! forms with #1085's pixels/points wording; row_height and col_width keep #1085's unit logic with #885's (si, lines) = line_targets
2026-10-22 02:35:21 +00:00
aiongg 8709b41666 Merge PR #1525: Keep leading empty columns and rows when saving CSV/text
Conflicts:
- crates/xlsx/src/csv.rs: write_csv doc comment merged (this PR's A1 rectangle sentence, main's per-field cap wording)
- crates/engine/src/tests.rs: kept both appended tests
2026-10-22 02:35:17 +00:00
aiongg bdb03349f6 Merge PR #1930: Accounting format: the documented currency symbol is honoured 2026-10-22 02:35:17 +00:00
aiongg 0bf7d40f3b Integration: #1534 remove the What::Hyperlinks paste-special target
The hyperlink copy stays inside What::All, which the cut path uses; the existing
test a_cut_moves_the_sources_notes_hyperlinks_and_merges covers it.
2026-10-22 02:35:17 +00:00
aiongg 43cd35d4bd Merge PR #1263: Bound Undo history growth after bulk edits
crates/engine/src/lib.rs: kept both the journal caps (#1230) and the undo byte budget; separate constants and call sites.
crates/engine/src/cmd/edit.rs: undo pushes through push_history; the redo entry keeps the undone edit's selection (#1855 behaviour).
crates/engine/src/tests.rs: kept both tests (redo_selects_the_redone_cell and the two history-bound tests).
2026-10-22 02:35:17 +00:00
aiongg 69f6ea363d Merge PR #1529: fix #1458: one reference-app sheet-name quoting rule for formulas, pivot sources and ADDRESS 2026-10-22 02:35:16 +00:00
aiongg 8daa1f41e1 Merge PR #1731: Move PivotTables with their cells on row/column insert and delete 2026-10-22 02:35:14 +00:00
aiongg cd5d21740a Merge PR #1326: Reject a list data validation that has no formula1 (#1303)
Conflicts:
- crates/engine/src/cmd/data.rs: kept both; the missing-formula1 guard comes right after the kind match, before the operator and list_source handling
2026-10-22 02:35:14 +00:00
aiongg 2c10a8da46 Merge PR #759: Names: a name over several ranges reads its top-level commas as unions
crates/formula/src/lib.rs: union pub use list (MAX_FORMULA_LEN and parse_name).
crates/engine/src/cmd/formulas.rs: keep both new tests.
2026-10-22 02:35:11 +00:00
aiongg 708c82cf2c Integration: #1059 delete_areas accepts a single row or column
home.deleteRows {rows:"2"} and home.deleteColumns {cols:"B"} failed with
"not a range"; delete_areas now parses with parse_lines. The PR's test
covers both.
2026-10-22 02:35:09 +00:00
aiongg c8e0323cf3 Merge PR #1975: Select precedent/dependent cells with Ctrl+[ / Ctrl+] (#1865 part 1) 2026-10-22 02:35:09 +00:00
aiongg 93517ccf51 Merge PR #1500: Fix number-format palette colours in grid and PDF output
crates/engine/src/cmd/print.rs: kept both appended tests
docs/ui-parity.md: kept HEAD header line, both change rows
2026-10-22 02:35:06 +00:00
aiongg ad490a1393 Merge PR #1735: Analysis ToolPak: moving-average standard errors use a running sum (#1043) 2026-10-22 02:35:05 +00:00
aiongg f8b7547344 Merge PR #1709: Rows: a big font isn't counted twice when the sheet's default height already fits it 2026-10-22 02:35:02 +00:00
aiongg 51401a382c Merge PR #1534: engine: a cut takes the source's notes, hyperlinks and merged areas with it 2026-10-22 02:35:01 +00:00
aiongg 32faa4f1c6 Merge PR #1661: Merged cell with Wrap Text: auto-fit skips it, so the text draws and the row keeps its default height 2026-10-22 02:34:59 +00:00
aiongg ee54646258 Merge PR #1372: Edit: text that would parse as a number or formula keeps its quote prefix in the editor (#1362) 2026-10-22 02:34:59 +00:00
aiongg 0f27cef4d6 Merge PR #1364: engine: keep case-insensitive replace from dropping text when folding shifts byte boundaries 2026-10-22 02:34:59 +00:00
aiongg 3eda63d5e5 Merge PR #1706: Reject table.resize when the new range overlaps another table 2026-10-22 02:34:58 +00:00
aiongg 9f03d2cd1b Merge PR #1434: Refuse table names that clash with defined names or R1C1 references
Conflicts: crates/engine/src/cmd/insert.rs (both appended a test at the end of tests; kept both)
2026-10-22 02:34:58 +00:00
aiongg e9479d2155 Merge PR #1360: engine: keep AutoFill text series from panicking or wrapping on i64 overflow 2026-10-22 02:34:56 +00:00
aiongg 675d96ef17 Merge PR #1373: Protection: Protect Sheet entries unprotect, selectLockedCells enforced (#1346) 2026-10-22 02:34:56 +00:00
aiongg 0087afce8a Merge PR #1230: Journal: cap by serialized size and keep a recording's start through trims
crates/engine/src/tests.rs: kept both sides' new tests (csv_as_text test from main, the two journal tests from the PR).
2026-10-22 02:34:53 +00:00
aiongg 38fb979498 Merge PR #1329: Slicer: find a named table on any sheet
Conflicts: crates/engine/src/tests.rs (both appended a test at the same spot; kept both)
2026-10-22 02:34:53 +00:00
aiongg 93de710d28 Merge PR #1306: Show dynamic array source formulas read-only in spill cells
docs/ui-parity.md: kept HEAD's header line, both change rows (newest first)
2026-10-22 02:34:52 +00:00
aiongg 78225db6f8 Merge PR #1108: Refuse a cut-paste whose destination does not fit instead of dropping cells (#997) 2026-10-22 02:34:52 +00:00
aiongg 0b573362bc Merge PR #1059: rows/cols parameters: accept a single row or column 2026-10-22 02:34:51 +00:00
aiongg 90cdb12fc6 Merge PR #1470: fix(solver): commit solutions and reports atomically 2026-10-22 02:34:49 +00:00
aiongg ee6dead310 Merge PR #1057: Flash Fill: read the text cells show 2026-10-22 02:34:49 +00:00
aiongg 49328f80c0 Merge PR #1381: engine: rebuild cell-store bands and counts when importing a JSON workbook 2026-10-22 02:34:49 +00:00
aiongg a512a6a8a7 Merge PR #1117: Fix table without header: re-point references when the data moves down (#1030) 2026-10-22 02:34:46 +00:00
aiongg 4f7111941e Merge PR #951: fix(fill): respect the workbook date system in monthly AutoFill
docs/ui-parity.md: kept the newer header line, kept both history rows.
2026-10-22 02:34:45 +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 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 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 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 947930e889 Merge PR #584: Refuse inserting cells that would push values off the worksheet (#580) 2026-10-22 02:34:36 +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 136a8fa07e Merge PR #1337: Selection: whole columns and rows don't widen to merged cells 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
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
prxnvt 0457f102a0 Engine: pasting only formats from a file leaves the destination's trust alone
Paste Special › Formats copies cell styles and merged areas. It copies no conditional formats,
formulas or validation, so it carries nothing that runs. It still marked the destination
FromFile: copying a formula cell from an opened file and pasting its formats into a new workbook
made that workbook ask before running its own active content.

Formats pastes now count as passive, like values, column widths and notes. The comment and
docs/architecture.md no longer say that pasted formats carry trust.
2026-10-21 17:27:20 -04:00