55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
import pandas as pd
|
||
import openpyxl
|
||
import os
|
||
from tqdm import tqdm
|
||
from datetime import datetime
|
||
|
||
DB_FILE = 'files/source.xlsx'
|
||
TEMPLATE_FILE = 'files/template.xlsx'
|
||
OUTPUT_FOLDER = 'files/output/'
|
||
|
||
MAPPING = {
|
||
'Дата МО': 'Q1',
|
||
'Время МО': 'Q2',
|
||
'Номер направления': 'A13',
|
||
'Фамилия, имя, отчество': 'D21',
|
||
'Дата рождения': 'D22',
|
||
'Структурное подразделение': 'F26',
|
||
'Должность работника ': 'F27',
|
||
'''Наименование вредных производственных факторов или фидов работ (приложение к приказу Минздрава РФ от 28.01.2021 №29Н)''': 'F30'
|
||
}
|
||
|
||
if not os.path.exists(OUTPUT_FOLDER):
|
||
os.makedirs(OUTPUT_FOLDER)
|
||
|
||
df = pd.read_excel(DB_FILE)
|
||
print(f"Всего сотрудников в списке: {len(df)}")
|
||
|
||
for index, row in tqdm(df.iterrows(), total=len(df), desc="Обработка"):
|
||
wb = openpyxl.load_workbook(TEMPLATE_FILE)
|
||
ws = wb.active
|
||
|
||
for excel_col, cell_address in MAPPING.items():
|
||
value = row.get(excel_col, "")
|
||
|
||
if pd.isna(value):
|
||
value = ""
|
||
|
||
if cell_address == 'A13':
|
||
ws[cell_address] = f"НАПРАВЛЕНИЕ № {value}" # type: ignore
|
||
|
||
elif isinstance(value, (datetime, pd.Timestamp)):
|
||
ws[cell_address] = value.strftime('%d.%m.%Y') # type: ignore
|
||
|
||
else:
|
||
ws[cell_address] = str(value) # type: ignore
|
||
|
||
num = str(row.get('Номер направления', index + 1)) # type: ignore
|
||
fio = str(row.get('Фамилия, имя, отчество')).strip().replace(' ', '_')
|
||
file_name = f"Направление_№{num}_{fio}.xlsx"
|
||
|
||
save_path = os.path.join(OUTPUT_FOLDER, file_name)
|
||
wb.save(save_path)
|
||
|
||
print(f"\nГотово! Файлы сохранены в '{OUTPUT_FOLDER}'")
|