2.8 KiB
FAIL
patches/libreoffice/0040-lok-calc-autofilter-keeps-a-marked-block.patch:73:固定选区只拦截 ExtendDataArea / ExtendBackColorArea,应用筛选条件仍可通过 ScDocShell::GetDBData 扩区。复现:使用 filter.rs 的 BLOCK,选择 A1:A4 开自动筛选,再点选 A1;读取 AutoFilterValues 得到 ["1", "2", "3"],随后执行 data.filter,参数为 {"column":0,"conditions":[{"op":"values","values":["1"]}]}。导出 ODS 的 database-range 已为 S.A1:S.A5,值为 6 的合计行带 table:visibility="filter"。GetDBData 在 sc/source/ui/docshell/docsh5.cxx:150 对单格重新计算连续数据区,172 行直接 SetArea,绕过新增守卫。同样,单格处关闭自动筛选再撤销,也恢复为包含合计行的范围。修复方向:所有重算已有筛选区的入口都遵守固定边界,切换和撤销保留原范围及其固定状态;补充单格处应用条件、关闭再撤销后的实际行可见性回归。独立 cargo build -p ely-lok --bins --locked、两个 client::tests::filter 测试及八个 client::tests::rules 测试通过,现有测试仅在初始选区仍存在时读取列表,漏掉此失败路径。证据:/tmp/ely-r29-cursor.log、/tmp/ely-r29-confirm.log。
patches/libreoffice/0040-lok-calc-autofilter-keeps-a-marked-block.patch:106:选区判定漏掉 SC_MARK_SIMPLE_FILTERED,已有条件筛选的连续选区无法获得固定边界。复现:同一 BLOCK,选择 A1:A4,执行 data.filter,参数为 {"conditions":[{"field":0,"op":"equals","value":"1"}]};再次选择 A1:A4 并执行 data.autofilter。AutoFilterValues 随即返回 ["1", "2", "3", "6"];应用仅保留 1 的条件后,导出的筛选区为 S.A1:S.A5,合计行 6 被隐藏。GetDBData 已支持 SC_MARK_SIMPLE_FILTERED,新增标记判定却只接受 SC_MARK_SIMPLE。修复方向:对跨行的连续已筛选选区同样记录固定边界,并增加先条件筛选、再开启自动筛选的回归。该场景以独立 worker 重跑两次结果一致,证据:/tmp/ely-r29-confirm.log、/tmp/ely-r29-cursor.log。
patches/libreoffice/0040-lok-calc-autofilter-keeps-a-marked-block.patch:19:固定范围依赖未持久化的 bMarkedRows,XLSX / ODS 保存重开后恢复原缺陷。复现:选择同一 BLOCK 的 A1:A4 开自动筛选,保存并关闭;独立读取存档确认 XLSX 的 autoFilter ref="A1:A4"、ODS 的 target-range-address="S.A1:S.A4"。重开后首次读取筛选列表返回 ["1", "2", "3", "6"];仅保留 1 后导出,范围变成 S.A1:S.A5,合计行带 table:visibility="filter"。两种格式均复现,违反 R2.9 的选区边界及 TABLE-01 / TABLE-13 的保存使用路径;agents.md:266 记录了此限制。修复方向:保存重开后保留或从已保存的筛选范围恢复固定边界,覆盖 XLSX、ODS 往返后的列表和实际隐藏行。证据:/tmp/ely-r29-confirm.log。