Привет ещё раз! 👋
Если ты уже освоил основы openpyxl и радуешься, как твои Excel-таблицы оживают под Python-скриптами, пора идти дальше. В этой статье:
- добавим графики в Excel-отчёты,
- пройдёмся по сводным таблицам (pivot-like),
- и — внимание! — научимся автоматически запускать скрипт по расписанию ⏰ (например, каждую пятницу в 17:00 — идеально для генерации недельных отчётов 📅).
🧠 Для начала: напомни себе, зачем это нужно
Писать отчёты вручную — это:
- 💀 скучно,
- 🧷 подвержено ошибкам,
- 🕰 отнимает уйму времени.
А теперь представь: ты уходишь в отпуск, а отчёты сами собираются, считаются и отправляются. Красота, да?
📈 Генерация Excel с графиком: быстрый recap
Предположим, у нас есть файл sales_data.csv:
Дата,Продавец,Продажи
2025-04-01,Ольга,1200
2025-04-02,Иван,1500
2025-04-03,Ольга,1700
...
⚙️ Скрипт, который сам построит график и Excel-отчёт:
import pandas as pd
import matplotlib.pyplot as plt
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from datetime import datetime
import os
def generate_weekly_report(input_file):
df = pd.read_csv(input_file, parse_dates=["Дата"])
today = pd.Timestamp.today().normalize()
last_week = today - pd.Timedelta(days=7)
weekly_data = df[df["Дата"].between(last_week, today)]
if weekly_data.empty:
print("⚠️ Нет данных за последнюю неделю.")
return
summary = weekly_data.groupby("Дата")["Продажи"].sum().reset_index()
# Строим график
chart_path = "weekly_sales_chart.png"
plt.figure(figsize=(10, 5))
plt.plot(summary["Дата"], summary["Продажи"], marker='o', color='green')
plt.title("Продажи за неделю")
plt.grid(True)
plt.tight_layout()
plt.savefig(chart_path)
plt.close()
# Excel
wb = Workbook()
ws = wb.active
ws.title = "Продажи"
ws.append(["Дата", "Сумма"])
for _, row in summary.iterrows():
ws.append([row["Дата"].date(), row["Продажи"]])
img = Image(chart_path)
img.anchor = "D2"
ws.add_image(img)
output_filename = f"Weekly_Report_{today.date()}.xlsx"
wb.save(output_filename)
os.remove(chart_path)
print(f"✅ Отчёт сохранён как: {output_filename}")
📊 Хочешь сводную таблицу?
Сами openpyxl не умеют делать pivot, но pandas может всё:
pivot = pd.pivot_table(
weekly_data,
index="Продавец",
values="Продажи",
aggfunc="sum"
)
pivot.to_excel("pivot_report.xlsx")
✅ Быстро, просто, без VBA и боли.
🧪 Как сгенерировать скрипт под свои задачи?
Ты можешь написать генератор своего отчётного скрипта буквально за 10 строк:
def create_report_script(product_column, date_column, value_column, filename):
with open("generated_report.py", "w", encoding="utf-8") as f:
f.write(f'''
import pandas as pd
from datetime import datetime, timedelta
def run():
df = pd.read_csv("{filename}", parse_dates=["{date_column}"])
week_ago = pd.Timestamp.today() - timedelta(days=7)
data = df[df["{date_column}"] >= week_ago]
summary = data.groupby("{product_column}")["{value_column}"].sum()
print("🧾 Сводка за неделю:")
print(summary)
if __name__ == "__main__":
run()
''')
📦 Запускаешь генератор:
create_report_script("Продавец", "Дата", "Продажи", "sales_data.csv")
И получаешь generated_report.py, который уже готов к использованию. Настраивай под любые данные — имя столбца, файл, фильтры.
⏰ Автоматический запуск скрипта по расписанию
Теперь — магия. Пусть отчёт генерируется сам раз в неделю.
💻 Вариант 1: Task Scheduler (Windows)
- Открываешь "Планировщик заданий".
- Создаёшь задачу → Триггеры → Каждую пятницу в 17:00.
- Действие:
Программа: python
Аргументы: C:\путь\к\generate_weekly_report.py
🎉 Всё! Ты на автопилоте.
🐧 Вариант 2: Cron (Linux/macOS)
Открываешь crontab -e, добавляешь:
0 17 * * FRI /usr/bin/python3 /home/user/reports/generate_weekly_report.py
Запустится каждый пятничный вечер. Прекрасно, чтобы уйти в выходные со спокойной душой.
🧠 На что ещё способна openpyxl
- ✅ Добавлять формулы: ws["D2"] = "=B2*C2"
- ✅ Менять шрифты, цвета, границы
- ✅ Прятать листы, защищать ячейки
- ✅ Генерировать отчёты с десятками листов
✨ Подведём итоги
- Мы научились автоматически создавать Excel-файлы с данными. Теперь можно не открывать Excel вручную, чтобы вбить очередной отчёт.
- Добавили графики прямо в отчёт, чтобы красиво, информативно и без лишних движений мышкой.
- Разобрались, как делать сводные таблицы (pivot) через pandas, потому что это удобно, быстро и без Excel-танцев с бубном.
- Написали генератор Python-скриптов под конкретные задачи. Теперь, чтобы сделать новый отчёт — не надо писать с нуля, просто задаёшь параметры.
- Настроили запуск скрипта по времени — каждую пятницу в 17:00. Больше никакой суеты в конце недели, всё делается само.
- И самое главное — ты теперь знаешь, как избавить себя от рутинной Excel-работы, сэкономив кучу времени и нервов.
🚀 Хочешь ещё больше?
- Email-рассылка отчётов прямо из Python 📧
- Telegram-бот для получения отчёта 📲
- Автоматическая интеграция с Google Sheets ☁️
💬 Напиши, и я помогу это реализовать. Ты заслуживаешь работать умно, а не много 😄