Содержание

  1. Зачем автоматизировать Excel
  2. Чтение и обработка с pandas
  3. Создание файлов с openpyxl
  4. Форматирование и стили
  5. Графики в Excel
  6. Автоматический запуск

Excel — главный инструмент работы с данными в российском бизнесе. Менеджеры тратят часы на копирование данных, аналитики — на обновление отчётов вручную. Python автоматизирует всё это за минуты.

1. Зачем автоматизировать Excel

Типичные задачи которые теряют часы каждую неделю:

  • Обновление сводного отчёта из нескольких источников
  • Объединение данных из десятков файлов в один
  • Форматирование и подготовка отчёта для руководства
  • Фильтрация, сортировка и дедупликация больших таблиц
  • Рассылка персонализированных Excel-файлов клиентам
Считаем экономию: если аналитик тратит 2 часа в день на Excel при зарплате 70 000 ₽/мес — это 18 750 ₽ ежемесячно только на рутину. Python-скрипт окупается за 1–2 недели.

2. Чтение и обработка с pandas

pandas — главная библиотека для работы с табличными данными. Читает Excel, CSV, JSON и базы данных в единый формат DataFrame.

# pip install pandas openpyxl

import pandas as pd

# Чтение Excel-файла
df = pd.read_excel('sales.xlsx', sheet_name='Январь')
print(df.head())           # первые 5 строк
print(df.shape)            # (строк, столбцов)
print(df.describe())      # статистика по числовым столбцам

# Фильтрация
big_orders = df[df['Сумма'] > 100000]

# Группировка и агрегация
by_manager = df.groupby('Менеджер')['Сумма'].agg(['sum', 'count', 'mean'])

# Объединение нескольких файлов
import glob
files = glob.glob('reports/*.xlsx')
combined = pd.concat([pd.read_excel(f) for f in files])

# Сохранение результата
by_manager.to_excel('summary.xlsx')

3. Создание файлов с openpyxl

openpyxl даёт полный контроль над Excel-файлом: форматирование, формулы, изображения, именованные диапазоны.

from openpyxl import Workbook
from openpyxl.utils import get_column_letter

wb = Workbook()
ws = wb.active
ws.title = 'Отчёт по продажам'

# Заголовки
headers = ['Менеджер', 'Заказов', 'Выручка', 'Средний чек']
ws.append(headers)

# Данные
data = [
    ['Иванов И.', 47, 2350000, 50000],
    ['Петрова А.', 63, 3150000, 50000],
    ['Сидоров К.', 38, 1520000, 40000],
]
for row in data:
    ws.append(row)

# Формула итогов
ws['B5'] = '=SUM(B2:B4)'
ws['C5'] = '=SUM(C2:C4)'

# Ширина столбцов
for i, col in enumerate(headers, 1):
    ws.column_dimensions[get_column_letter(i)].width = 20

wb.save('report.xlsx')

4. Форматирование и стили

from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.styles.numbers import FORMAT_NUMBER_COMMA_SEPARATED1

# Жирный заголовок с фоном
header_font = Font(bold=True, color='FFFFFF', size=11)
header_fill = PatternFill(fill_type='solid', fgColor='3051B4')

for cell in ws[1]:  # первая строка
    cell.font = header_font
    cell.fill = header_fill
    cell.alignment = Alignment(horizontal='center')

# Формат числа с разрядами
for row in ws.iter_rows(min_row=2, min_col=3, max_col=4):
    for cell in row:
        cell.number_format = '# ##0 ₽'

# Чередование строк
for i, row in enumerate(ws.iter_rows(min_row=2), 2):
    if i % 2 == 0:
        for cell in row:
            cell.fill = PatternFill(fill_type='solid', fgColor='EEF2FF')

5. Графики в Excel

from openpyxl.chart import BarChart, Reference

chart = BarChart()
chart.title = 'Выручка по менеджерам'
chart.style = 10
chart.y_axis.title = 'Выручка, ₽'
chart.x_axis.title = 'Менеджер'

# Данные для графика (столбец C — выручка)
data = Reference(ws, min_col=3, min_row=1, max_row=4)
cats = Reference(ws, min_col=1, min_row=2, max_row=4)

chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
chart.shape = 4

# Вставляем график на лист
ws.add_chart(chart, 'F2')
wb.save('report_with_chart.xlsx')

6. Автоматический запуск каждое утро

# cron — запуск ежедневно в 8:00
# crontab -e
0 8 * * * /usr/bin/python3 /home/app/excel_report.py >> /var/log/report.log 2>&1

# Или через schedule в Python
import schedule, time

def generate_report():
    # ваш код генерации отчёта
    print('Отчёт сформирован')

schedule.every().day.at('08:00').do(generate_report)

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

Нужна автоматизация Excel под ключ?

Разработаем скрипт который автоматически формирует нужные вам Excel-отчёты. От 15 000 ₽, срок от 3 дней.

Узнать стоимость