Coverage for src\genesis\parsers\merge_fill.py: 100%
15 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 14:20 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 14:20 +0800
1from __future__ import annotations
3from typing import Any
6def forward_fill(
7 matrix: list[list[Any]],
8 merged_ranges: list[tuple[int, int, int, int]],
9) -> list[list[Any]]:
10 """合并单元格:用左上角主格值填充范围内全部单元格。"""
11 out = [list(row) for row in matrix]
12 for (min_row, min_col, max_row, max_col) in merged_ranges:
13 # 防御:合并范围 1-based,非法(<1)或越界时跳过该范围
14 if not out or min_row < 1 or min_col < 1:
15 continue
16 if min_row > len(out) or min_col > len(out[min_row - 1]):
17 continue
18 main_value = out[min_row - 1][min_col - 1]
19 for r in range(min_row, min(max_row, len(out)) + 1):
20 row = out[r - 1]
21 for c in range(min_col, min(max_col, len(row)) + 1):
22 row[c - 1] = main_value
23 return out