Merge pull request #796 from vangel76:fix/subtotal-hidden-recalc
This commit is contained in:
commit
599fc0fe6d
|
|
@ -132,6 +132,7 @@ Ranked; estimates in Opus 5.5 agent-hours. Detail and the full beta-gate list in
|
|||
|
||||
| Date | What landed |
|
||||
|---|---|
|
||||
| 2026-10-12 | SUBTOTAL(109) over hidden rows recalculates after Row Height, AutoFit Row Height and Ungroup reveal rows (found by the command-sequence fuzz) |
|
||||
| 2026-10-12 | Page Layout view: drag the margin edges on the rulers to set the page margins (resize cursor, live preview, value tooltip, one undo step, Esc cancels) (#792) |
|
||||
| 2026-10-12 | Forecast Sheet gets Forecast Start: begin the forecast inside the history to compare it with the actuals (#785) |
|
||||
| 2026-10-12 | Ink strokes save as unfilled DrawingML paths and reopen as editable ink with their points, colour and width; icons in #551 remain a follow-up |
|
||||
|
|
|
|||
|
|
@ -1158,6 +1158,7 @@ fn group(s: &mut Session, p: &Json, on: bool) -> Result<Json> {
|
|||
{
|
||||
e.collapsed = false;
|
||||
}
|
||||
cx.structural = true; // ungrouping reveals hidden rows: SUBTOTAL(10x) depends on it
|
||||
Ok(Json::Null)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -963,6 +963,7 @@ fn row_height(s: &mut Session, p: &Json) -> Result<Json> {
|
|||
e.custom = true;
|
||||
}
|
||||
}
|
||||
cx.structural = true; // setting a height shows or hides rows: SUBTOTAL(10x) depends on it
|
||||
Ok(Json::Null)
|
||||
})
|
||||
}
|
||||
|
|
@ -1077,6 +1078,7 @@ fn autofit_rows(s: &mut Session, p: &Json) -> Result<Json> {
|
|||
}
|
||||
cx.fit_rows.extend((a..=b).map(|r| (si, r)));
|
||||
}
|
||||
cx.structural = true; // autofit reveals hidden rows: SUBTOTAL(10x) depends on it
|
||||
Ok(Json::Null)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3041,6 +3041,19 @@ fn a_decrypted_workbook_never_overwrites_its_encrypted_original() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
fn subtotal_109_recalculates_when_row_height_or_autofit_reveals_rows() {
|
||||
let mut s = s();
|
||||
s.execute("range.setValues", json!({"range": "A1", "values": [[1], [2], [4], [8]]})).unwrap();
|
||||
s.execute("cell.set", json!({"cell": "C1", "input": "=SUBTOTAL(109,A1:A4)"})).unwrap();
|
||||
s.execute("home.hideRows", json!({"rows": "2:3"})).unwrap();
|
||||
assert_eq!(v(&s, "C1"), Value::Number(9.0));
|
||||
// A non-zero height unhides the rows (the fuzz found the stale SUBTOTAL).
|
||||
s.execute("home.rowHeight", json!({"rows": "2:3", "height": 60.0})).unwrap();
|
||||
assert_eq!(v(&s, "C1"), Value::Number(15.0));
|
||||
s.execute("home.hideRows", json!({"rows": "2:3"})).unwrap();
|
||||
assert_eq!(v(&s, "C1"), Value::Number(9.0));
|
||||
s.execute("home.autofitRowHeight", json!({"rows": "2:3"})).unwrap();
|
||||
assert_eq!(v(&s, "C1"), Value::Number(15.0));
|
||||
fn paste_special_validation_copies_the_rule() {
|
||||
let mut s = s();
|
||||
let ok = |s: &mut Session, cell: &str, input: &str| s.execute("data.validate", json!({"cell": cell, "input": input})).unwrap()["ok"] == true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue