from openpyxl import load_workbook
from openpyxl.styles import Font
# ---------------- НАСТРОЙКИ ----------------
excel_file = "input.xlsx"
source_sheet_name = "Названия" # Лист, где лежат названия
template_sheet_name = "Шаблон" # Лист-шаблон
start_row = 2 # С какой строки брать названия
name_column = 1 # Столбец A
output_file = "output.xlsx"
# ------------------------------------------
wb = load_workbook(excel_file)
source_sheet = wb[source_sheet_name]
template_sheet = wb[template_sheet_name]
for row in range(start_row, source_sheet.max_row + 1):
value = source_sheet.cell(row=row, column=name_column).value
if value is None:
continue
sheet_name = str(value).strip()
if not sheet_name:
continue
# Excel не разрешает некоторые символы
for ch in r'[]:*?/\\':
sheet_name = sheet_name.replace(ch, "_")
sheet_name = sheet_name[:31] # Максимум 31 символ
# Если лист уже существует
original = sheet_name
i = 1
while sheet_name in wb.sheetnames:
sheet_name = f"{original[:28]}_{i}"
i += 1
# Копируем шаблон
new_sheet = wb.copy_worksheet(template_sheet)
new_sheet.title = sheet_name
# Если A1:J1 не объединены, можно раскомментировать:
# new_sheet.merge_cells("A1:J1")
cell = new_sheet["A1"]
cell.value = value
cell.font = Font(
name="Arimo",
size=48,
bold=True,
color="FF0000"
)
wb.save(output_file)
print("Готово!")