Загрузка данных


import xlwings as xw

# ---------------- НАСТРОЙКИ ----------------

FILE = r"Мониторинг готовности к НУГ 2026.xlsx"

SOURCE_SHEET = "Список"
TEMPLATE_SHEET = "Свод"

START_ROW = 2          # с какой строки начинаются названия
NAME_COLUMN = 1        # 1=A, 2=B, 3=C...

# -------------------------------------------

app = xw.App(visible=False, add_book=False)
app.display_alerts = False
app.screen_updating = False

try:
    wb = app.books.open(FILE)

    source = wb.sheets[SOURCE_SHEET]
    template = wb.sheets[TEMPLATE_SHEET]

    last_row = source.range((source.cells.last_cell.row, NAME_COLUMN)).end("up").row

    for row in range(START_ROW, last_row + 1):
        value = source.range((row, NAME_COLUMN)).value

        if value is None or str(value).strip() == "":
            continue

        name = str(value).strip()

        # Недопустимые символы в названии листа
        for ch in r'[]:*?/\\':
            name = name.replace(ch, "_")

        name = name[:31]

        # Если имя уже существует
        original = name
        i = 1
        while any(s.name == name for s in wb.sheets):
            name = f"{original[:28]}_{i}"
            i += 1

        # Копируем лист "Свод"
        template.api.Copy(After=wb.sheets[-1].api)

        new_sheet = wb.sheets[-1]
        new_sheet.name = name

        # Записываем название
        cell = new_sheet.range("A1")
        cell.value = value

        # Форматирование
        cell.api.Font.Name = "Arimo"
        cell.api.Font.Size = 48
        cell.api.Font.Bold = True
        cell.api.Font.Color = 255   # Красный

        # Центрирование
        cell.api.HorizontalAlignment = -4108
        cell.api.VerticalAlignment = -4108

    wb.save()
    wb.close()

finally:
    app.quit()

print("Готово!")