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

@@ -8,6 +8,29 @@ import pytest
from fixtures import fixture_sheets, fixture_xlsx, MAIN
from schedule.errors import ScheduleError
from schedule.xlsx import excel_serial_to_date, parse_workbook
from xlsx_builder import SheetSpec, build_workbook
def test_merge_orphan_value_cleared():
"""Значение в не-топ ячейке мержа в интерфейсе не видно — парсер его не отдаёт.
Реальный кейс: в таблице занятие, а сверху на колонку группы наложили
пустой 2x2-мерж; в xlsx значение осталось, в таблице — пусто.
"""
spec = SheetSpec(
rows=[
["", "", "", ""],
["т", "", "", ""], # A2 — топ мержа A2:B3
["", "осиротевшее", "", "призрак"], # B3, D3
],
merges=["A2:B3", "D2:D3"],
)
sheets = parse_workbook(build_workbook({"s": spec}))
rows = sheets["s"].rows
# топ-значение разлилось по всему диапазону
assert rows[1][0] == rows[1][1] == rows[2][0] == rows[2][1] == "т"
# D2 пустое, D3 было «призрак» за мержом -> обе пусто
assert rows[1][3] == "" and rows[2][3] == ""
def test_parse_workbook_fixture():