0

Автоматизация индивидуальной нарезки файлов Excel и их распространение с помощью Pandas и Outlook

В ходе учебного процесса была реализована автоматизация индивидуальной нарезки файлов Excel. Это является очень полезным инструментом в современное время. У крупных компаний, как правило большое количество клиентов, информация о этих клиентов очень часто храниться в Excel файлах. Данная программа, очень быстро может разделить большой файл с данными о клиентах на файлы в которых будет храниться данные о нужных нам клиентах.
Ниже представлена реализация автоматизации индивидуальной нарезки файлов Excel и их распространение с помощью Pandas и Outlook.

import datetime
import os
import shutil
from pathlib import Path
import pandas as pd
import win32com.client as win32

## Установить формат даты
today_string = datetime.datetime.today().strftime('%m%d%Y_%I%p')
today_string2 = datetime.datetime.today().strftime('%b %d, %Y')

## Установка имен папок для вложений и архивирования
attachment_path = Path.cwd() / 'data' / 'attachments'
archive_dir = Path.cwd() / 'archive'
src_file = Path.cwd() / 'data' / 'customers.xlsx'

df = pd.read_excel(src_file)
df.head()

customer_group = df.groupby('CUSTOMER_ID')

for ID, group_df in customer_group:
    print(ID)

## Запишите каждый идентификатор, группу в отдельные файлы Excel и используйте идентификатор,
## чтобы назвать каждый файл с сегодняшней датой
attachments = []
for ID, group_df in customer_group:
    attachment = attachment_path / f'{ID}_{today_string}.xlsx'
    group_df.to_excel(attachment, index=False)
    attachments.append((ID, str(attachment)))

df2 = pd.DataFrame(attachments, columns=['CUSTOMER_ID', 'FILE'])

email_merge = pd.merge(df, df2, how='left')
combined = email_merge[ ['CUSTOMER_ID', 'EMAIL', 'FILE'] ].drop_duplicates()

# Отправка индивидуальных отчетов по электронной почте соответствующим получателям
class EmailsSender:
    def __init__(self):
        self.outlook = win32.Dispatch('outlook.application')

    def send_email(self, to_email_address, attachment_path):
        mail = self.outlook.CreateItem(0)
        mail.To = to_email_address
        mail.Subject = today_string2 + ' Report'
        mail.Body = """Please find today's report attached."""
        mail.Attachments.Add(Source=attachment_path)
        # Показать электронную почту
        mail.Display(True)
        # Отправка
        mail.Send()

email_sender = EmailsSender()
for index, row in combined.iterrows():
    email_sender.send_email(row['EMAIL'], row['FILE'])

# Переместить файлы в архив
for f in attachments:
   shutil.move(f[1], archive_dir)

Уржунцев Юрий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *