Скрытое в таблице не парсим

Правило: если строка или столбец в таблице скрыт, его данные не попадают в
расписание — раньше скрытые столбцы пропускались только при поиске групп.

- xlsx: у листа появился набор скрытых строк (Worksheet.hidden_rows);
- расписание, недели: скрытые строки пропускаются;
- аудитории и справочник ФИО: скрытые столбцы не читаются вовсе (убрана
  двухпроходная логика «сначала видимые, потом скрытые»);
- тесты: билдер умеет скрытые строки, добавлены проверки «скрытое не парсится».

Проверено на таблице: группы и всё расписание совпали байт в байт (скрытых
строк нет), из аудиторий ушли только те, что лежат в скрытых столбцах
(402, 405, 415), справочник ФИО стал короче на 2 скрытые записи, у 223
осталось описание из видимого столбца (20 мест, интерактивная панель).
Тесты: 171.
This commit is contained in:
2026-10-12 12:07:39 +03:00
parent 172636f227
commit d131adbcb8
4 changed files with 44 additions and 17 deletions

View File

@@ -28,6 +28,7 @@ class SheetSpec:
rows: list[list]
merges: list[str] = field(default_factory=list)
hidden_cols: list[tuple[int, int]] = field(default_factory=list) # 0-based, инклязивно
hidden_rows: list[int] = field(default_factory=list) # 0-based
def build_workbook(sheets: dict[str, SheetSpec]) -> bytes:
@@ -83,7 +84,8 @@ def build_workbook(sheets: dict[str, SheetSpec]) -> bytes:
t = f' t="{t_attr}"' if t_attr else ""
cells.append(f'<c r="{col_letter(c)}{r}"{t}><v>{escape(str(v))}</v></c>')
if cells:
row_xml.append(f'<row r="{r}">{"".join(cells)}</row>')
hidden = ' hidden="1"' if (r - 1) in spec.hidden_rows else ""
row_xml.append(f'<row r="{r}"{hidden}>{"".join(cells)}</row>')
merges_xml = ""
if spec.merges: