xlsx: чистить «осиротевшие» значения в мержах (призрачные занятия)

В интерфейсе в объединённом блоке видно только верхне-левую ячейку;
значения, оставшиеся в остальных ячейках мержа (занесли текст, а сверху
наложили пустой мерж), в таблице не видны. Раньше парсер их отдавал:
реальный кейс — ПИЭ-41БО, вторник, 1 пара, знаменатель (мерж AH14:AI15).
По листу таких ячеек ровно одна; по 33 группам diff только этот слот.
This commit is contained in:
2026-09-09 18:00:13 +03:00
parent 5ac3db50d3
commit e61ff1d683
2 changed files with 31 additions and 0 deletions

View File

@@ -174,6 +174,14 @@ def _parse_sheet(xml_bytes: bytes, shared: list[str]) -> Worksheet:
c2, r2 = _parse_ref(b)
max_row = max(max_row, r2)
max_col = max(max_col, c2)
# в объединённом блоке в интерфейсе видно только верхне-левую
# ячейку; «осиротевшие» значения в остальных (следы правок,
# например занесли текст, а сверху наложили мерж) — невидимые,
# их чистим, иначе парсер отдаёт «призрачные» занятия
for rr in range(r1, r2 + 1):
for cc in range(c1, c2 + 1):
if (rr, cc) != (r1, c1):
cells.pop((rr, cc), None)
top = cells.get((r1, c1), "")
if not top:
continue