Время прочтения: 2 мин.
Авторасчёт периода для формирования отчета.
Итак, нам требуется отчет, содержащий данные за всю прошлую неделю. Определяем даты (в нашем случае с прошлого понедельника до воскресенья). Нам поможет модуль 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()
Всё! Теперь наш отчет будет формироваться без нашего участия от начала и до конца! Вам даже не требуется присутствовать на рабочем месте. Правда, это может вызвать вопросы от коллег о том, как вам удаётся выдерживать пунктуальность, даже находясь на нескончаемых совещаниях.