Files
med-check_generator/main.ipynb

312 lines
12 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"execution_count": 70,
"id": "c7f0feca",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import openpyxl\n",
"import os\n",
"from tqdm import tqdm\n",
"from datetime import datetime"
]
},
{
"cell_type": "code",
"execution_count": 71,
"id": "c3d2a034",
"metadata": {},
"outputs": [],
"source": [
"DB_FILE = 'files/source.xlsx'\n",
"TEMPLATE_FILE = 'files/template.xlsx'\n",
"OUTPUT_FOLDER = 'files/output/'\n",
"\n",
"\n",
"MAPPING = {\n",
" 'Дата МО' : 'Q1',\n",
" 'Время МО' : 'Q2',\n",
" 'Номер направления': 'A13',\n",
" 'Фамилия, имя, отчество': 'D21',\n",
" 'Дата рождения': 'D22',\n",
" 'Структурное подразделение': 'F26',\n",
" 'Должность работника ': 'F27',\n",
" '''Наименование вредных производственных факторов или фидов работ (приложение к приказу Минздрава РФ от 28.01.2021 №29Н)''': 'F30'\n",
"}\n",
"\n",
"if not os.path.exists(OUTPUT_FOLDER):\n",
" os.makedirs(OUTPUT_FOLDER)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"id": "753709e8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Всего сотрудников в списке: 1482\n"
]
},
{
"data": {
"text/plain": [
"Index(['Дата МО', 'Время МО', 'Номер направления', 'Фамилия, имя, отчество',\n",
" 'Должность работника ', 'Дата рождения', 'Структурное подразделение',\n",
" 'Наименование вредных производственных факторов или фидов работ (приложение к приказу Минздрава РФ от 28.01.2021 №29Н)',\n",
" 'Примечания'],\n",
" dtype='object')"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_excel(DB_FILE)\n",
"print(f\"Всего сотрудников в списке: {len(df)}\")\n",
"# print(df.columns.tolist())\n",
"\n",
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": 73,
"id": "dca336b7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Дата МО</th>\n",
" <th>Время МО</th>\n",
" <th>Номер направления</th>\n",
" <th>Фамилия, имя, отчество</th>\n",
" <th>Должность работника</th>\n",
" <th>Дата рождения</th>\n",
" <th>Структурное подразделение</th>\n",
" <th>Наименование вредных производственных факторов или фидов работ (приложение к приказу Минздрава РФ от 28.01.2021 №29Н)</th>\n",
" <th>Примечания</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2026-02-02</td>\n",
" <td>09:30</td>\n",
" <td>1</td>\n",
" <td>Орлова Ксения Николаевна</td>\n",
" <td>Доцент</td>\n",
" <td>17.07.1985</td>\n",
" <td>кафедра радиационной физики и безопасности ато...</td>\n",
" <td>4.1</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2026-02-02</td>\n",
" <td>09:35</td>\n",
" <td>2</td>\n",
" <td>Камнев Владимир Александрович</td>\n",
" <td>Специалист по учебно-методической работе 1 кат...</td>\n",
" <td>24.01.1955</td>\n",
" <td>кафедра радиационной физики и безопасности ато...</td>\n",
" <td>4.1</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2026-02-02</td>\n",
" <td>09:40</td>\n",
" <td>3</td>\n",
" <td>Стогов Юрий Владимирович</td>\n",
" <td>Доцент</td>\n",
" <td>05.01.1959</td>\n",
" <td>кафедра теоретической и экспериментальной физи...</td>\n",
" <td>4.1</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2026-02-02</td>\n",
" <td>09:45</td>\n",
" <td>4</td>\n",
" <td>Алферов Владимир Петрович</td>\n",
" <td>Заместитель главного инженера исследовательско...</td>\n",
" <td>08.11.1948</td>\n",
" <td>исследовательский реактор типовой атомного центра</td>\n",
" <td>4.1</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2026-02-02</td>\n",
" <td>09:50</td>\n",
" <td>5</td>\n",
" <td>Савостиков Сергей Алексеевич</td>\n",
" <td>Слесарь по ремонту и обслуживанию систем венти...</td>\n",
" <td>20.05.1988</td>\n",
" <td>теплоэнергетический отдел службы главного инже...</td>\n",
" <td>5.1, 6.2</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Дата МО Время МО Номер направления Фамилия, имя, отчество \\\n",
"0 2026-02-02 09:30 1 Орлова Ксения Николаевна \n",
"1 2026-02-02 09:35 2 Камнев Владимир Александрович \n",
"2 2026-02-02 09:40 3 Стогов Юрий Владимирович \n",
"3 2026-02-02 09:45 4 Алферов Владимир Петрович \n",
"4 2026-02-02 09:50 5 Савостиков Сергей Алексеевич \n",
"\n",
" Должность работника Дата рождения \\\n",
"0 Доцент 17.07.1985 \n",
"1 Специалист по учебно-методической работе 1 кат... 24.01.1955 \n",
"2 Доцент 05.01.1959 \n",
"3 Заместитель главного инженера исследовательско... 08.11.1948 \n",
"4 Слесарь по ремонту и обслуживанию систем венти... 20.05.1988 \n",
"\n",
" Структурное подразделение \\\n",
"0 кафедра радиационной физики и безопасности ато... \n",
"1 кафедра радиационной физики и безопасности ато... \n",
"2 кафедра теоретической и экспериментальной физи... \n",
"3 исследовательский реактор типовой атомного центра \n",
"4 теплоэнергетический отдел службы главного инже... \n",
"\n",
" Наименование вредных производственных факторов или фидов работ (приложение к приказу Минздрава РФ от 28.01.2021 №29Н) \\\n",
"0 4.1 \n",
"1 4.1 \n",
"2 4.1 \n",
"3 4.1 \n",
"4 5.1, 6.2 \n",
"\n",
" Примечания \n",
"0 NaN \n",
"1 NaN \n",
"2 NaN \n",
"3 NaN \n",
"4 NaN "
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 74,
"id": "94ab472b",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1482/1482 [00:54<00:00, 27.41it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Файлы сохранены в 'files/output/'\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"for index, row in tqdm(df.iterrows(), total=len(df)):\n",
" wb = openpyxl.load_workbook(TEMPLATE_FILE)\n",
" ws = wb.active\n",
"\n",
" # Заполняем поля по словарю MAPPING\n",
" for excel_col, cell_address in MAPPING.items():\n",
" value = row.get(excel_col, \"\")\n",
"\n",
" if pd.isna(value):\n",
" value = \"\"\n",
"\n",
" if cell_address == 'A13':\n",
" ws[cell_address] = f\"НАПРАВЛЕНИЕ № {value}\"\n",
"\n",
" elif isinstance(value, (datetime, pd.Timestamp)):\n",
" ws[cell_address] = value.strftime('%d.%m.%Y')\n",
"\n",
" else:\n",
" ws[cell_address] = str(value)\n",
"\n",
" num = str(row.get('Номер направления', index + 1))\n",
" fio = str(row.get('Фамилия, имя, отчество')).strip().replace(' ', '_')\n",
" file_name = f\"Направление_№{num}_{fio}.xlsx\"\n",
"\n",
" save_path = os.path.join(OUTPUT_FOLDER, file_name)\n",
" wb.save(save_path)\n",
"\n",
"print(f\"\\nФайлы сохранены в '{OUTPUT_FOLDER}'\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "med-check-generator",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}