{"id":14279,"url":"\/distributions\/14279\/click?bit=1&hash=4408d97a995353c62a7353088166cda4ded361bf29df096e086ea0bbb9c1b2fc","title":"\u0427\u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435: \u0432\u044b\u0435\u0445\u0430\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u0437\u0430\u0435\u0445\u0430\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435?","buttonText":"","imageUuid":""}

Скажи «НЕТ!» ручному труду. Автоматизация запуска, расчета периодов и рассылки

Автоматизация отчетности сейчас в тренде. Но мало кто задумывается, что можно автоматизировать не только отдельные этапы составления отчетов, но и полностью убрать ручной труд! Не нужно запускать построение отчета, указывать входные данные и даже делать рассылку?

Авторасчёт периода для формирования отчета.

Итак, нам требуется отчет, содержащий данные за всю прошлую неделю. Определяем даты (в нашем случае с прошлого понедельника до воскресенья). Нам поможет модуль datetime.

prWeek = timedelta(weeks=1) prMon = timedelta(days=datetime.date(datetime.now()).weekday()) prSun = timedelta(days=6) dstart = datetime.date(datetime.now()) - prWeek - prMon dend = dstart + prSun

Запускаем выгрузку данных, обрабатываем их и приводим отчет к нужному виду. Подробнее об этом мы писали в одной из предыдущих статей Так ли вы «любите» отчеты, как «любим» их мы? Создаем отчет с помощью ExcelWriter

Перемещение файла.

Получив готовый отчет, перемещаем его в папку назначения, используя библиотеку shutil.

shutil.copyfile(old_path + f'{file_name}', new_path + f'{file_name}')

Рассылка в Outlook.

Осталось только сделать рассылку на весь отдел. Читаем файл с сотрудниками и создаём список с их адресами.

df = pd.read_excel(r"address.xlsx") address_list = ''.join(df.mail)

Составляем и отправляем письмо модулем win32com.

app = win32com.client.Dispatch("Outlook.Application") mess = app.CreateItem(0) mess.To = address_list mess.Subject = 'Отчёт' mess.HTMLBody = f''' <HTML> <BODY> <font face='Calibri'> Добрый день, коллеги!<br> <a href={path}> Отчёт за неделю готов </a> </font> </BODY> </HTML>''' mess.Send()

Автозапуск по расписанию.

И, конечно же, программируем автозапуск нашего скрипта каждый понедельник в 10:00 с использованием модуля schedule.

def job(): report() schedule.every().monday.at("10:00").do(job) while True: schedule.run_pending()

Всё! Теперь наш отчет будет формироваться без нашего участия от начала и до конца! Вам даже не требуется присутствовать на рабочем месте. Правда, это может вызвать вопросы от коллег о том, как вам удаётся выдерживать пунктуальность, даже находясь на нескончаемых совещаниях.

0
Комментарии
-3 комментариев
Раскрывать всегда