184 lines
7.3 KiB
Python
184 lines
7.3 KiB
Python
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()
|
||
|