Найти в Дзене
Анастасия Софт

📊 Продолжение: Автоматизация Excel с Python — графики, сводные таблицы и запуск по времени

Привет ещё раз! 👋
Если ты уже освоил основы openpyxl и радуешься, как твои Excel-таблицы оживают под Python-скриптами, пора идти дальше. В этой статье: Писать отчёты вручную — это: А теперь представь: ты уходишь в отпуск, а отчёты сами собираются, считаются и отправляются. Красота, да? Предположим, у нас есть файл sales_data.csv: Дата,Продавец,Продажи
2025-04-01,Ольга,1200
2025-04-02,Иван,1500
2025-04-03,Ольга,1700
... 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(
Оглавление
📊 Продолжение: Автоматизация Excel с Python — графики, сводные таблицы и запуск по времени
📊 Продолжение: Автоматизация Excel с Python — графики, сводные таблицы и запуск по времени

Привет ещё раз! 👋

Если ты уже освоил основы 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)

  1. Открываешь "Планировщик заданий".
  2. Создаёшь задачу → Триггеры → Каждую пятницу в 17:00.
  3. Действие:
    Программа: 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 ☁️

💬 Напиши, и я помогу это реализовать. Ты заслуживаешь работать умно, а не много 😄