Добавить в корзинуПозвонить
Найти в Дзене
Анастасия Софт

📈 Автоматизация отчётов: парсим Excel и шлём письма с Python

или «Как стать офисным магом, не вставая с кресла» "Если ты копируешь данные вручную каждую пятницу — знай, Python может делать это за тебя, и без нытья."
— человек, который однажды научился писать скрипты Цель: автоматизировать рутину, связанную с Excel-файлами и отчётами по email.
Например: pip install pandas openpyxl schedule import pandas as pd
import smtplib
from email.mime.text import MIMEText
# 1. Читаем Excel
df = pd.read_excel("sales.xlsx")
# 2. Группируем по менеджерам
totals = df.groupby("Менеджер")["Сумма продаж"].sum()
# 3. Готовим письмо
body = "🏆 Итоги продаж:\n\n" + totals.to_string()
msg = MIMEText(body, "plain", "utf-8")
msg["Subject"] = "Еженедельный отчёт по продажам"
msg["From"] = "you@example.com"
msg["To"] = "manager@example.com"
# 4. Отправляем письмо
with smtplib.SMTP("smtp.example.com", 587) as server:
server.starttls()
server.login("you@example.com", "your_password")
server.send_message(msg) 👉 Комментарий: from email.mime.multipart import
Оглавление

или «Как стать офисным магом, не вставая с кресла»

"Если ты копируешь данные вручную каждую пятницу — знай, Python может делать это за тебя, и без нытья."

— человек, который однажды научился писать скрипты

🧠 Что мы делаем?

Цель: автоматизировать рутину, связанную с Excel-файлами и отчётами по email.

Например:

  • Собрали данные в Excel → Отправили начальнику/клиенту
  • Подсчитали суммы, средние → Скинули в письме
  • Проверили отклонения от нормы → Автоматически предупредили

Что используем:

  • pandas — для работы с Excel (без боли)
  • openpyxl — для стиля и форматирования Excel
  • smtplib, email — для отправки писем
  • Бонус: schedule и datetime — для автоматизации

⚙️ Установка

pip install pandas openpyxl schedule

📊 Задача 1: Считаем итоги по Excel и шлём менеджеру

📦 Excel-файл: sales.xlsx

Excel-файл: sales.xlsx
Excel-файл: sales.xlsx

🔍 Код

import pandas as pd
import smtplib
from email.mime.text import MIMEText

# 1. Читаем Excel
df = pd.read_excel("sales.xlsx")

# 2. Группируем по менеджерам
totals = df.groupby("Менеджер")["Сумма продаж"].sum()

# 3. Готовим письмо
body = "🏆 Итоги продаж:\n\n" + totals.to_string()

msg = MIMEText(body, "plain", "utf-8")
msg["Subject"] = "Еженедельный отчёт по продажам"
msg["From"] = "you@example.com"
msg["To"] = "manager@example.com"

# 4. Отправляем письмо
with smtplib.SMTP("smtp.example.com", 587) as server:
server.starttls()
server.login("you@example.com", "your_password")
server.send_message(msg)

👉 Комментарий:

  • to_string() делает симпатичный текст из серии.
  • smtplib — обычная SMTP-отправка, можно использовать Gmail, Яндекс, что угодно.

📊 Задача 2: Отправка Excel-файла как вложения

from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

msg = MIMEMultipart()
msg["Subject"] = "Продажи за неделю"
msg["From"] = "you@example.com"
msg["To"] = "boss@example.com"

msg.attach(MIMEText("Файл с подробностями во вложении."))

with open("sales.xlsx", "rb") as f:
part = MIMEApplication(f.read(), Name="sales.xlsx")
part["Content-Disposition"] = 'attachment; filename="sales.xlsx"'
msg.attach(part)

# Отправка как раньше

📊 Задача 3: Форматируем Excel и добавляем сводную строку

from openpyxl import load_workbook

# Открываем и редактируем Excel
wb = load_workbook("sales.xlsx")
ws = wb.active

# Добавляем сводную строку
last_row = ws.max_row + 1
ws[f"A{last_row}"] = "ИТОГО"
ws[f"B{last_row}"] = f"=SUM(B2:B{last_row - 1})"

# Сохраняем
wb.save("sales_formatted.xlsx")

👉 Комментарий: Это уже level-up: Excel как живой, с формулами и форматами.

📊 Задача 4: Отправляем письма каждому менеджеру с его результатами

grouped = df.groupby("Менеджер")

for name, group in grouped:
total = group["Сумма продаж"].sum()
body = f"Привет, {name}!\nТвои продажи за неделю составили: {total} руб."

msg = MIMEText(body)
msg["Subject"] = "Ваш персональный отчёт"
msg["From"] = "you@example.com"
msg["To"] = f"{name.lower()}@example.com"

with smtplib.SMTP("smtp.example.com", 587) as server:
server.starttls()
server.login("you@example.com", "your_password")
server.send_message(msg)

👉 Комментарий: Индивидуальные письма — сразу +50 к уважению в коллективе.

⏱️ Задача 5: Автоматический запуск отчёта по расписанию

import schedule
import time

def send_report():
print("💼 Генерация и отправка отчёта...")
# Вставь сюда любую из задач выше

# Каждый понедельник в 9:00
schedule.every().monday.at("09:00").do(send_report)

while True:
schedule.run_pending()
time.sleep(60)

👉 Комментарий: Скрипт висит, проверяет время и делает всю работу сам. Да, ты теперь — владелец бота.

💡 Бонус: Защита Excel паролем (через xlsxwriter)

import xlsxwriter

workbook = xlsxwriter.Workbook("protected.xlsx", {'constant_memory': True})
workbook.set_properties({'password': '1234'})

worksheet = workbook.add_worksheet()
worksheet.write("A1", "Секретная инфа")

workbook.close()

🔐 Советы по безопасности

  • Никогда не храни пароли в коде! Используй .env, keyring, configparser
  • Проверь SMTP-доступ и авторизацию (Gmail требует OAuth или специальный пароль)
  • Не забудь добавить try-except — почтовые ошибки случаются

🧾 Резюме

Резюме
Резюме
Автоматизация отчётов: парсим Excel и шлём письма с Python
Автоматизация отчётов: парсим Excel и шлём письма с Python