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

📦 Автоматизация сбора данных из Excel для отчетности с использованием Python

Или как Python может собирать отчёты за тебя, пока ты пьёшь кофе ☕ Допустим, ты аналитик, бухгалтер, project manager или просто бедный смертный, которому каждую неделю прилетает: Вручную? Нет.
С помощью Python? О да. pip install pandas openpyxl В папке ./отчеты/ лежат Excel-файлы: Каждый файл содержит один лист с колонками: Но, как это бывает в реальной жизни, в каких-то файлах: import pandas as pd
import os
# Путь к папке с отчётами
folder_path = './отчеты/'
# Получаем список всех Excel-файлов
files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]
print("Найдено файлов:", files) 💬 Здесь мы просто сканируем папку. Можно добавить фильтр по дате или имени, если нужно. # Храним все таблицы тут
all_data = []
# Перебираем каждый файл
for file in files:
filepath = os.path.join(folder_path, file)
df = pd.read_excel(filepath)
# Нормализуем имена колонок
df.columns = df.columns.str.strip().str.lower()
# Переименовываем, если нужно
df.rename(columns={
Оглавление

Или как Python может собирать отчёты за тебя, пока ты пьёшь кофе ☕

Автоматизация сбора данных из Excel для отчетности с использованием Python
Автоматизация сбора данных из Excel для отчетности с использованием Python

🤔 Проблема: каждый понедельник — Excel-ад

Допустим, ты аналитик, бухгалтер, project manager или просто бедный смертный, которому каждую неделю прилетает:

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

Вручную? Нет.

С помощью Python? О да.

🧠 Что мы сегодня сделаем?

  • Соберём данные из нескольких Excel-файлов
  • Объединим всё в один датафрейм
  • Приведём к единому виду (очистка и нормализация)
  • Проведём агрегацию (например, по отделам или регионам)
  • Сохраним красивый Excel-отчёт, готовый к отправке руководству

🧰 Что нужно установить?

pip install pandas openpyxl

📁 Исходные данные

В папке ./отчеты/ лежат Excel-файлы:

  • Москва.xlsx
  • СПб.xlsx
  • Новосибирск.xlsx

    ...и так далее.

Каждый файл содержит один лист с колонками:

  • Менеджер
  • Регион
  • Продажи
  • Дата

Но, как это бывает в реальной жизни, в каких-то файлах:

  • названия колонок написаны по-разному (Продажи, Продажа, Продаж)
  • лишние пробелы
  • дата в разных форматах

🚀 Шаг 1: Загружаем все Excel-файлы из папки

import pandas as pd
import os

# Путь к папке с отчётами
folder_path = './отчеты/'

# Получаем список всех Excel-файлов
files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]

print("Найдено файлов:", files)

💬 Здесь мы просто сканируем папку. Можно добавить фильтр по дате или имени, если нужно.

🧩 Шаг 2: Читаем все файлы и обрабатываем

# Храним все таблицы тут
all_data = []

# Перебираем каждый файл
for file in files:
filepath = os.path.join(folder_path, file)
df = pd.read_excel(filepath)

# Нормализуем имена колонок
df.columns = df.columns.str.strip().str.lower()

# Переименовываем, если нужно
df.rename(columns={
'продажа': 'продажи',
'продаж': 'продажи'
}, inplace=True)

# Добавляем имя файла как колонку "Источник"
df['источник'] = file.replace('.xlsx', '')

all_data.append(df)

💬 Здесь уже начинается магия:

  • приведение к нижнему регистру и удаление пробелов спасает от «Продажи» vs « продаж »;
  • rename() позволяет привести колонки к стандарту;
  • колонка источник — полезна, если нужно понимать, из какого региона строка.

🧬 Шаг 3: Объединяем данные

# Объединяем все фреймы в один
combined_df = pd.concat(all_data, ignore_index=True)

print("Объединённая таблица:")
print(combined_df.head())

💬 Всё — теперь это одна большая таблица. А дальше можно творить аналитику.

🧹 Шаг 4: Очистка и приведение форматов

# Преобразуем "продажи" в число
combined_df['продажи'] = pd.to_numeric(combined_df['продажи'], errors='coerce')

# Убираем строки без продаж
combined_df.dropna(subset=['продажи'], inplace=True)

# Приводим "дата" к формату datetime
combined_df['дата'] = pd.to_datetime(combined_df['дата'], errors='coerce')

# Убираем строки без даты
combined_df.dropna(subset=['дата'], inplace=True)

💬 Здесь мы боремся с типичной Excel-проблемой:

– продали "тыщу" вместо 1000,

– дату ввели как "вчера" или "23.04",

– или забыли указать вообще.

📊 Шаг 5: Группировка и агрегация

Допустим, мы хотим:

  • Общие продажи по регионам
  • Средняя продажа на менеджера
  • Сводку по дням

# Продажи по регионам
by_region = combined_df.groupby('регион')['продажи'].sum().sort_values(ascending=False)

# Средние продажи по менеджерам
by_manager = combined_df.groupby('менеджер')['продажи'].mean().sort_values(ascending=False)

# Сводка по дням
by_day = combined_df.groupby('дата')['продажи'].sum().sort_index()

💬 groupby() — как сводная таблица, но с ракетным двигателем.

💾 Шаг 6: Сохраняем финальный отчёт

with pd.ExcelWriter('итоговый_отчет.xlsx', engine='openpyxl') as writer:
combined_df.to_excel(writer, sheet_name='Все данные', index=False)
by_region.to_excel(writer, sheet_name='По регионам')
by_manager.to_excel(writer, sheet_name='Среднее по менеджерам')
by_day.to_excel(writer, sheet_name='По дням')

💬 Всё — один Excel, много вкладок. Руководство будет счастливо (или хотя бы не будет ругаться).

🧠 Дополнительно можно:

  • Автоматизировать запуск скрипта (через планировщик задач или cron)
  • Отправлять итоговый отчёт на почту
  • Хранить шаблоны для визуализации
  • Добавить логирование или Telegram-уведомления

✅ Что ты теперь умеешь:

  • 📂 Автоматически сканировать папку с Excel-файлами
  • 🧼 Приводить хаотичные таблицы к единому формату
  • 🧠 Группировать, агрегировать и анализировать
  • 📤 Создавать отчёт, готовый к отправке
  • ☕ И всё это без ручного копипаста

📣 Финалочка

Автоматизация Excel-отчётности с помощью Python — это как нанять секретаря, который работает 24/7, не болеет, не жалуется и никогда не забывает нолик.

А главное — ты теперь умеешь это делать сам.