Работа с Excel-файлами: библиотека openpyxl

🔥 Зачем работать с Excel через Python?

Excel — это мощный инструмент, но когда данных становится много, ручное редактирование превращается в кошмар. Python и библиотека openpyxl позволяют автоматизировать:

  • Генерацию отчетов
  • Обработку больших таблиц
  • Конвертацию данных
  • Массовое редактирование файлов

Пример из жизни: представим, что каждую неделю вам нужно обновлять 50 прайс-листов. Вручную это 3 часа работы, а скрипт на Python сделает это за 3 секунды!


⚡ Быстрый старт: установка и первый скрипт

Установите библиотеку через pip:

pip install openpyxl

Создадим простой Excel-файл:

from openpyxl import Workbook

# Создаем новую книгу
wb = Workbook()
ws = wb.active  # Получаем активный лист

# Записываем данные
ws['A1'] = "Привет, мир!"
ws['B1'] = 42

# Сохраняем файл
wb.save("мой_первый_файл.xlsx")

👉 Что произошло? 1. Создали новую книгу (как чистый Excel-файл) 2. Получили активный лист (по умолчанию "Sheet") 3. Записали данные в ячейки A1 и B1 4. Сохранили файл


📊 Чтение данных из Excel

Допустим, у нас есть файл sales.xlsx с данными о продажах:

Дата Товар Количество
2023-01-01 Ноутбук 5
2023-01-02 Мышь 20
from openpyxl import load_workbook

# Загружаем файл
wb = load_workbook('sales.xlsx')
ws = wb.active

# Читаем данные построчно
for row in ws.iter_rows(values_only=True):
    print(row)

# Получить значение конкретной ячейки
print(ws['B2'].value)  # Выведет: "Ноутбук"

🔍 Важные моменты:

  • iter_rows() возвращает генератор строк
  • values_only=True — получаем только значения, без объектов ячеек
  • Можно обращаться к ячейкам как ws['A1'] или ws.cell(row=1, column=1)

✍️ Запись и редактирование данных

Модифицируем наш файл продаж:

from openpyxl import load_workbook

wb = load_workbook('sales.xlsx')
ws = wb.active

# Добавляем новую запись
ws.append(['2023-01-03', 'Клавиатура', 15])

# Редактируем существующую ячейку
ws['C2'] = 25  # Меняем количество мышей

# Добавляем формулу
ws['D1'] = "Итого"
ws['D2'] = "=C2*100"  # Предположим, цена мыши — 100 руб.

wb.save('sales_updated.xlsx')

💡 Полезные методы:

  • append() — добавляет новую строку в конец
  • Можно использовать Excel-формулы как обычные строки
  • Для стилей (шрифты, цвета) есть отдельный модуль openpyxl.styles

🛠 Продвинутые возможности

Работа с несколькими листами

# Создаем новый лист
wb.create_sheet("Анализ")

# Получаем лист по имени
analytics_sheet = wb["Анализ"]
analytics_sheet['A1'] = "Сводка по продажам"

# Переименовываем лист
wb["Sheet"].title = "Исходные данные"

Фильтрация данных

# Получаем все товары, которых продано больше 10
for row in ws.iter_rows(min_row=2, values_only=True):
    date, product, quantity = row
    if quantity > 10:
        print(f"{product}: {quantity} шт.")

Работа со стилями

from openpyxl.styles import Font, Color

# Делаем заголовок жирным и синим
header = ws['A1']
header.font = Font(bold=True, color="0000FF")

🚀 Реальный пример: обработка прайс-листа

Представим, что нам нужно:

  1. Загрузить прайс-лист
  2. Увеличить цены на 10%
  3. Выделить товары с ценой > 1000 руб.
  4. Сохранить новый файл
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill

# Загрузка файла
wb = load_workbook('price_list.xlsx')
ws = wb.active

# Стиль для дорогих товаров
highlight = Font(bold=True, color="FF0000")

# Обработка данных
for row in range(2, ws.max_row + 1):
    price = ws.cell(row=row, column=2).value
    new_price = price * 1.1  # +10%

    ws.cell(row=row, column=2).value = new_price

    if new_price > 1000:
        ws.cell(row=row, column=1).font = highlight

wb.save('price_list_updated.xlsx')

🔥 Совет от профи

Чтобы не потерять данные при работе с большими файлами:

  1. Всегда работайте с копией файла
  2. Сохраняйте промежуточные результаты
  3. Используйте try-except для обработки ошибок
try:
    wb.save('result.xlsx')
except PermissionError:
    print("Ошибка! Файл открыт в Excel. Закройте его и попробуйте снова.")

Для более сложных задач (например, работы с диаграммами) стоит посмотреть уроки Данилы Бежина, где подробно разбирают продвинутые техники работы с openpyxl.

Теперь у вас есть мощный инструмент для автоматизации работы с Excel! Пробуйте, экспериментируйте и автоматизируйте рутину. 🚀

Скрыть рекламу навсегда

🌱 Индвидидулаьные занятия

Индивидуальные онлайн-занятия по программированию для детей и подростков

Личный подход, без воды, с фокусом на понимание и реальные проекты.

🚀 Записаться на занятие