import pandas as pd import math from openpyxl import load_workbook from openpyxl.styles import PatternFill from openpyxl.utils import get_column_letter class read_drop_table: def __init__(self, path: str, sheet: str): db = pd.read_excel(path, sheet_name=sheet) self.grafa2 = db["Графа 2"].dropna().tolist() self.grafa4 = db["Графы 4"].dropna().tolist() self.grafa6 = db["Графа 6"].dropna().tolist() self.grafa7 = db["Графа 7"].dropna().tolist() self.grafa9 = db["Графа 9"].dropna().tolist() self.grafa10 = db["Графа 10"].dropna().tolist() self.grafa14 = db["Графа 14"].dropna().tolist() self.grafa5811 = db["Графы 5,8,11"].dropna().tolist() class read_collection_form: def __init__(self, path: str, sheet: str): self.path = path self.sheet = sheet self.db = pd.read_excel(path, sheet_name=sheet, header=10) # Оставим только строки, где указан субъект РФ self.db = self.db.dropna(subset=["9"]) self.load_openpyxl() def load_openpyxl(self): self.wb = load_workbook(self.path) self.ws = self.wb[self.sheet] def paint_green(self, address: str): green_fill = PatternFill(start_color="90EE90", end_color="90EE90", fill_type="solid") self.ws[address].fill = green_fill def paint_red(self, address: str): red_fill = PatternFill(start_color="FF7F7F", end_color="FF7F7F", fill_type="solid") self.ws[address].fill = red_fill def rerol_column(self, row, row_index): status = row.values[4] # графа 4: статус обучающегося graf9_value = row.values[9] if len(row.values) > 9 else None graf5_value = row.values[5] if len(row.values) > 5 else None for column_index, cell in enumerate(row.values): address = get_column_letter(column_index + 1) + str(row_index + 12) match column_index: case 0 | 1 | 3: if pd.isna(cell): self.paint_red(address) else: self.paint_green(address) case 2: if cell in temp.grafa2: self.paint_green(address) else: self.paint_red(address) case 4: if pd.isna(cell): self.paint_red(address) elif cell in temp.grafa4: self.paint_green(address) else: self.paint_red(address) case 5: if pd.isna(cell): self.paint_red(address) elif cell in temp.grafa5811: self.paint_green(address) else: self.paint_red(address) case 6: if pd.isna(cell): self.paint_green(address) elif cell in temp.grafa6: self.paint_green(address) else: self.paint_red(address) case 7: if pd.isna(cell): self.paint_green(address) elif cell in temp.grafa7: self.paint_green(address) else: self.paint_red(address) case 9: if pd.isna(cell): if row.values[4] == "не завершил обучение: отчислен по собственному желанию": self.paint_green(address) else: self.paint_red(address) elif cell in temp.grafa9: self.paint_green(address) else: self.paint_red(address) case 10: if graf9_value in [ "зарегистрирован в ЦЗН в качестве безработного (получает пособие по безработице)", "не планирует трудоустраиваться, в том числе по причинам получения иных социальных льгот" ]: if pd.isna(cell): self.paint_red(address) elif cell in temp.grafa10: self.paint_green(address) else: self.paint_red(address) case 11: if graf9_value in [ "трудоустроен у иного работодателя", "будет трудоустроен у иного работодателя" ]: if pd.isna(cell): pass elif cell in temp.grafa5811: self.paint_green(address) else: self.paint_red(address) case 12 | 13: if graf9_value in [ "трудоустроен у иного работодателя", "будет трудоустроен у иного работодателя" ]: if pd.isna(cell): self.paint_red(address) else: self.paint_green(address) case 14: if graf5_value == "да": if graf9_value not in [ "трудоустроен у работодателя-партнера кластера", "будет трудоустроен у работодателя-партнера кластера" ]: self.paint_red(address) else: self.paint_green(address) def iterate_rows(self): for row_index, row in self.db.iterrows(): self.rerol_column(row=row, row_index=row_index) self.wb.save(self.path) import os def list_files_in_current_directory(extension_filter=None): # Получаем путь к папке, где находится скрипт current_dir = os.path.dirname(os.path.abspath(__file__)) # Список всех файлов all_files = [] for file in os.listdir(current_dir): full_path = os.path.join(current_dir, file) if os.path.isfile(full_path): if extension_filter: if file.lower().endswith(extension_filter.lower()): all_files.append(full_path) else: all_files.append(full_path) return all_files # Получить все файлы files = list_files_in_current_directory() # Только .xlsx файлы xlsx_files = list_files_in_current_directory(".xlsx") for path in xlsx_files: temp = read_drop_table(path=path, sheet="Выпадающие списки") temp1 = read_collection_form(path=path, sheet="Форма сбора").iterate_rows()