start
This commit is contained in:
183
main.py
Normal file
183
main.py
Normal 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()
|
||||
|
||||
Reference in New Issue
Block a user