Работать с Excel руками — это почти как мыть посуду: вроде и просто, но хочется автоматизировать. Если вы каждый день открываете .xlsx-файлы, копируете данные, обновляете таблицы и добавляете новые строки — поздравляю, у вас есть отличный повод научиться использовать Python и библиотеку openpyxl.
Сегодня мы научимся:
- 📂 Открывать и читать Excel-файлы;
- ✍️ Редактировать и сохранять таблицы;
- 📊 Добавлять формулы и стили;
- 🧠 Решать реальные задачи (и немного флексить).
Готовы? Погнали!
🔧 Установка openpyxl
Сначала установим библиотеку. Открываем терминал и пишем:
pip install openpyxl
Если всё прошло гладко, вы уже на шаг ближе к Excel-мастерству.
📘 Пример 1: Открытие и чтение Excel-файла
Задача: допустим, у нас есть таблица "отчет по продажам", и мы хотим посчитать общее количество проданных товаров.
from openpyxl import load_workbook
# Загружаем наш Excel-файл
wb = load_workbook('sales_report.xlsx')
# Выбираем активный лист (обычно первый в файле)
sheet = wb.active
# Инициализируем переменную для подсчета
total_sold = 0
# Начинаем с 2-й строки (первая — заголовки)
for row in sheet.iter_rows(min_row=2, values_only=True):
total_sold += row[2] # допустим, в третьем столбце — количество
print(f"Всего продано: {total_sold} товаров")
🔍 Комментарии:
- load_workbook — открывает Excel-файл.
- sheet.iter_rows — итерирует строки.
- values_only=True — мы не хотим ячейки, только значения.
- row[2] — третий столбец (индексация с 0).
📝 Пример 2: Создание нового Excel-файла и запись данных
Задача: создадим новый файл с итогами для команды.
from openpyxl import Workbook
# Создаем новый файл
wb = Workbook()
# Получаем активный лист
sheet = wb.active
# Заголовки
sheet.append(["Имя", "Продажи", "Бонус"])
# Примерные данные
sales_data = [
("Андрей", 12000),
("Оля", 18000),
("Дима", 9000),
]
# Расчет бонуса 10%
for name, sales in sales_data:
bonus = sales * 0.1
sheet.append([name, sales, bonus])
# Сохраняем файл
wb.save("team_bonus.xlsx")
🧠 Лайфхак: sheet.append() добавляет строку к таблице — удобно и быстро.
🧮 Пример 3: Добавляем формулы и стили
Задача: автоматизируем Excel-файл, чтобы Excel сам считал суммы и выглядел красиво.
from openpyxl.styles import Font
from openpyxl.utils import get_column_letter
# Создаем файл
wb = Workbook()
sheet = wb.active
# Данные
sheet.append(["Товар", "Цена", "Количество", "Итого"])
items = [
("Книга", 500, 3),
("Ручка", 50, 10),
("Тетрадь", 100, 5),
]
# Добавим строки и формулы
for i, (name, price, qty) in enumerate(items, start=2):
sheet[f"A{i}"] = name
sheet[f"B{i}"] = price
sheet[f"C{i}"] = qty
# Формула в Excel-стиле
sheet[f"D{i}"] = f"=B{i}*C{i}"
# Добавим жирный шрифт к заголовкам
for col in range(1, 5):
cell = sheet[f"{get_column_letter(col)}1"]
cell.font = Font(bold=True)
# Сохраняем
wb.save("shop_report.xlsx")
✨ Результат — Excel-файл с формулами и жирными заголовками. Красота!
🧩 Пример 4: Реальная задача — сравнение двух Excel-файлов
Задача: у нас есть два прайс-листа от поставщика за разные месяцы. Нужно найти, какие цены изменились.
# Загрузим два файла
wb1 = load_workbook("prices_march.xlsx")
wb2 = load_workbook("prices_april.xlsx")
sheet1 = wb1.active
sheet2 = wb2.active
# Предположим: A — товар, B — цена
changes = []
for row1, row2 in zip(sheet1.iter_rows(min_row=2, values_only=True),
sheet2.iter_rows(min_row=2, values_only=True)):
product1, price1 = row1
product2, price2 = row2
if price1 != price2:
changes.append((product1, price1, price2))
# Выводим результат
print("Изменившиеся товары:")
for product, old, new in changes:
print(f"{product}: было {old}, стало {new}")
📎 Полезно, если работаете в отделе закупок или логистики — можно отслеживать изменения поставщика.
🔄 Ещё парочка полезных трюков
1. Объединение ячеек:
sheet.merge_cells("A1:D1")
sheet["A1"] = "Сводная таблица"
2. Заморозить панель:
sheet.freeze_panes = "A2"
3. Установка ширины колонок:
sheet.column_dimensions["A"].width = 20
🤖 Кому и зачем это нужно?
- Бухгалтерам — автоматизировать сводки и бонусы;
- Менеджерам — собирать отчеты без ручного труда;
- Аналитикам — выгружать и обрабатывать данные из Excel;
- Разработчикам — делать отчеты прямо из кода.
🧼 Заключение
openpyxl — это универсальный инструмент, который поможет вам сэкономить часы, а то и дни рутины в Excel. Он простой, понятный и очень гибкий.
Вместо того чтобы каждый день тыкать мышкой, вы можете один раз написать скрипт — и дальше просто запускать его, потягивая кофе ☕.
Если хотите — помогу дописать скрипт под вашу задачу или даже сделать парсинг из Excel в базу данных. Дайте знать 😉
Надеюсь, статья была полезной. Если понравилось — кидайте другу-бухгалтеру. Ему понравится 💼📊
📊 Продолжение: Автоматизация Excel с Python — графики, сводные таблицы и запуск по времени