{"id":14285,"url":"\/distributions\/14285\/click?bit=1&hash=346f3dd5dee2d88930b559bfe049bf63f032c3f6597a81b363a99361cc92d37d","title":"\u0421\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f","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 комментариев
Раскрывать всегда