This commit is contained in:
2025-06-19 16:46:23 +05:00
commit d937a1c7ea
7 changed files with 358 additions and 0 deletions

183
main.py Normal file
View File

@@ -0,0 +1,183 @@
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()