Загрузка данных
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()