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


import openpyxl
from copy import copy

# Список ваших файлов
files = [
    "3.xlsx", 
    "контингентАРСЕН.xlsx", 
    "feo.xlsx", 
    "контингентДанискрутойпарень.xlsx"
]

# УКАЖИТЕ НОМЕР КОЛОНКИ С ИМЕНЕМ/ID ЧЕЛОВЕКА (1 = A, 2 = B, 3 = C и т.д.)
NAME_COLUMN = 1 

def is_formatted(cell):
    """Проверяет, есть ли у ячейки нужное форматирование (красный текст, заливка, зачеркивание)."""
    # 1. Проверка на зачеркивание
    if cell.font and cell.font.strike:
        return True
        
    # 2. Проверка на цвет шрифта (ищем красный или отличный от стандартного черного)
    if cell.font and cell.font.color:
        # В Excel красный цвет часто кодируется как 'FFFF0000'
        color_val = cell.font.color.rgb
        if type(color_val) == str and color_val != '00000000' and color_val != 'FF000000':
            return True

    # 3. Проверка на заливку фона
    if cell.fill and cell.fill.start_color and cell.fill.start_color.index:
        fill_val = cell.fill.start_color.index
        # '00000000' или 'FFFFFFFF' - обычно прозрачный/белый фон без заливки
        if fill_val != '00000000' and fill_val != 'FFFFFFFF' and fill_val != 0:
            return True
            
    return False

def main():
    print("Чтение файлов и сбор данных о форматировании...")
    # Словарь для хранения стилей: { Имя_человека: { Номер_колонки: (font, fill) } }
    styles_memory = {}
    workbooks = {}

    # ЭТАП 1: Загрузка всех файлов и запоминание стилей
    for filename in files:
        print(f"  Анализируем {filename}...")
        try:
            wb = openpyxl.load_workbook(filename)
            workbooks[filename] = wb
            sheet = wb.active
            
            for row in sheet.iter_rows(min_row=2): # Начинаем со 2 строки (без заголовков)
                person_name = row[NAME_COLUMN - 1].value
                if not person_name:
                    continue
                    
                if person_name not in styles_memory:
                    styles_memory[person_name] = {}
                    
                for cell in row:
                    if is_formatted(cell):
                        # Сохраняем копию шрифта и заливки для этого человека и этой колонки
                        col_idx = cell.column
                        if col_idx not in styles_memory[person_name]:
                            styles_memory[person_name][col_idx] = (copy(cell.font), copy(cell.fill))
        except FileNotFoundError:
            print(f"  [!] Ошибка: Файл {filename} не найден.")
            continue

    print("Применение найденного форматирования...")
    # ЭТАП 2: Применение сохраненных стилей к неотформатированным ячейкам
    for filename, wb in workbooks.items():
        sheet = wb.active
        changed = False
        
        for row in sheet.iter_rows(min_row=2):
            person_name = row[NAME_COLUMN - 1].value
            if not person_name or person_name not in styles_memory:
                continue
                
            for cell in row:
                col_idx = cell.column
                # Если ячейка НЕ отформатирована, но в памяти ЕСТЬ формат для этого человека и этой колонки
                if not is_formatted(cell) and col_idx in styles_memory[person_name]:
                    saved_font, saved_fill = styles_memory[person_name][col_idx]
                    cell.font = copy(saved_font)
                    cell.fill = copy(saved_fill)
                    changed = True
                    
        # Сохраняем изменения в новый файл, чтобы не перезаписать оригиналы
        if changed:
            new_filename = f"updated_{filename}"
            wb.save(new_filename)
            print(f"  Файл сохранен с изменениями: {new_filename}")
        else:
            print(f"  В файле {filename} не потребовалось изменений.")

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

if __name__ == "__main__":
    main()