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

Генерация отчетов в Excel с использованием Python: шаг за шагом, без боли

Excel — это как старая добрая кофеварка в офисе. Все ей пользуются, все на неё надеются. И рано или поздно наступает момент, когда вам нужно генерировать Excel-отчёты автоматически. Не вручную, не по шаблону «копипаст+формат+надежда», а по-честному — с помощью Python. В этой статье мы: Мы будем использовать: Установка библиотек: pip install pandas openpyxl Вы аналитик в компании "Пельмешки & Ко". Менеджеры торгуют по регионам, и каждую неделю нужно отправлять отчёт с: import pandas as pd
from datetime import datetime
import openpyxl
from openpyxl.styles import Font, Alignment
# Исходные данные
data = {
'Дата': [
'2025-04-01', '2025-04-01', '2025-04-02', '2025-04-02',
'2025-04-03', '2025-04-03', '2025-04-04'
],
'Менеджер': [
'Иванов И.И.', 'Сидоров С.С.', 'Иванов И.И.',
'Петров П.П.', 'Сидоров С.С.', 'Иванов И.И.', 'Петров П.П.'
],
'Регион': [
'Москва', 'Питер', 'Москва', 'Новосибирск',
'Питер', 'Москва', 'Новосибирск'
Оглавление
Генерация отчетов в Excel с использованием Python: шаг за шагом, без боли
Генерация отчетов в Excel с использованием Python: шаг за шагом, без боли

Введение

Excel — это как старая добрая кофеварка в офисе. Все ей пользуются, все на неё надеются. И рано или поздно наступает момент, когда вам нужно генерировать Excel-отчёты автоматически. Не вручную, не по шаблону «копипаст+формат+надежда», а по-честному — с помощью Python.

В этой статье мы:

  • создадим Excel-файл с нуля;
  • добавим в него таблицы, формулы и стили;
  • разложим всё по листам;
  • и сделаем так, чтобы этот отчёт можно было гордо отправить начальству (или заказчику).

Что понадобится?

Мы будем использовать:

  • pandas — для работы с табличками;
  • openpyxl — для работы именно с Excel-файлами (.xlsx);
  • datetime — немного магии с датами.

Установка библиотек:

pip install pandas openpyxl

📈 Задача: отчёт по продажам

Вы аналитик в компании "Пельмешки & Ко". Менеджеры торгуют по регионам, и каждую неделю нужно отправлять отчёт с:

  1. Общими продажами по менеджерам;
  2. Продажами по регионам;
  3. Сводной таблицей (менеджер/регион);
  4. И… красиво оформленным Excel-файлом!

🛠 Данные: создадим сами

import pandas as pd
from datetime import datetime
import openpyxl
from openpyxl.styles import Font, Alignment

# Исходные данные
data = {
'Дата': [
'2025-04-01', '2025-04-01', '2025-04-02', '2025-04-02',
'2025-04-03', '2025-04-03', '2025-04-04'
],
'Менеджер': [
'Иванов И.И.', 'Сидоров С.С.', 'Иванов И.И.',
'Петров П.П.', 'Сидоров С.С.', 'Иванов И.И.', 'Петров П.П.'
],
'Регион': [
'Москва', 'Питер', 'Москва', 'Новосибирск',
'Питер', 'Москва', 'Новосибирск'
],
'Продаж (₽)': [15000, 12000, 18000, 20000, 16000, 21000, 22000]
}

# Создаём DataFrame
df = pd.DataFrame(data)

# Преобразуем 'Дата' в формат datetime
df['Дата'] = pd.to_datetime(df['Дата'])

print(df)

🧪 Да, можно и из CSV подгрузить. Но для учебных целей — вот простые данные.

📊 Шаг 1: Считаем продажи по менеджерам

# Сумма продаж по менеджерам
sales_by_manager = df.groupby('Менеджер')['Продаж (₽)'].sum().reset_index()

📌 groupby — группируем по менеджеру. sum() — сколько кто продал. reset_index() — чтобы снова получить DataFrame, а не Series.

🗺️ Шаг 2: Средние продажи по регионам

# Средняя продажа по каждому региону
avg_sales_by_region = df.groupby('Регион')['Продаж (₽)'].mean().reset_index()

💡 Полезно, если вы хотите сравнивать эффективность по географии.

🧮 Шаг 3: Сводная таблица (менеджер × регион)

# Сводная таблица: менеджеры против регионов
pivot_table = pd.pivot_table(
df,
index='Менеджер',
columns='Регион',
values='Продаж (₽)',
aggfunc='sum',
fill_value=0
)

🔁 pivot_table — мощная штука. Можно создавать почти как в Excel — только без мышки и слёз.

📁 Шаг 4: Генерация Excel-файла

Теперь всё это богатство — сохраняем в Excel.

# Создаём ExcelWriter
with pd.ExcelWriter('sales_report.xlsx', engine='openpyxl') as writer:
df.to_excel(writer, sheet_name='Исходные данные', index=False)
sales_by_manager.to_excel(writer, sheet_name='По менеджерам', index=False)
avg_sales_by_region.to_excel(writer, sheet_name='По регионам', index=False)
pivot_table.to_excel(writer, sheet_name='Сводная таблица')

📝 Мы не просто сохраняем один лист — у нас будет многостраничный Excel-файл. Красиво же!

💄 Шаг 5: Украшаем Excel

Теперь откроем файл и наведем немного стиля.

from openpyxl import load_workbook

# Загружаем наш файл
wb = load_workbook('sales_report.xlsx')

# Берём нужный лист
ws = wb['По менеджерам']

# Сделаем заголовки жирными и по центру
for cell in ws[1]:
cell.font = Font(bold=True)
cell.alignment = Alignment(horizontal='center')

# Добавим итог внизу
total = sum(ws.cell(row=i, column=2).value for i in range(2, ws.max_row + 1))
ws.cell(row=ws.max_row + 1, column=1).value = 'Итого'
ws.cell(row=ws.max_row, column=2).value = total
ws.cell(row=ws.max_row, column=2).font = Font(bold=True)

# Сохраняем финальную версию
wb.save('sales_report_final.xlsx')

🎨 Тут мы добавили немного Excel-магии: жирный шрифт, выравнивание, формулы. Эстетика важна!

✅ Проверка: что получилось?

  • 📄 4 листа: исходные, по менеджерам, по регионам, сводка;
  • 📊 Суммы, средние значения, разбивки;
  • 💅 Отформатированные заголовки и итоги;
  • 📨 Готово к отправке или публикации.

🎁 Бонус: автоматизация

Хотите генерировать такой отчёт каждый день/неделю?

  • Оберните код в функцию;
  • Запустите по расписанию (через cron или Task Scheduler);
  • Добавьте отправку на почту (через smtplib).

Вывод

С помощью Python и пары библиотек вы можете:

  • автоматизировать Excel-отчёты;
  • экономить часы (а то и дни) ручной работы;
  • генерировать красивые, наглядные и полезные отчёты.

Больше никакого: "Ой, я забыл вставить формулу в ячейку E15!" 🧘

Что дальше?

Хочешь:

  • добавить графики прямо в Excel?
  • сделать генерацию из базы данных?
  • отправлять отчёты по почте из скрипта?

Пиши — всё разберём 😎