Работа с 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")
🚀 Реальный пример: обработка прайс-листа
Представим, что нам нужно:
- Загрузить прайс-лист
- Увеличить цены на 10%
- Выделить товары с ценой > 1000 руб.
- Сохранить новый файл
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')
🔥 Совет от профи
Чтобы не потерять данные при работе с большими файлами:
- Всегда работайте с копией файла
- Сохраняйте промежуточные результаты
- Используйте
try-exceptдля обработки ошибок
try:
wb.save('result.xlsx')
except PermissionError:
print("Ошибка! Файл открыт в Excel. Закройте его и попробуйте снова.")
Для более сложных задач (например, работы с диаграммами) стоит посмотреть уроки Данилы Бежина, где подробно разбирают продвинутые техники работы с openpyxl.
Теперь у вас есть мощный инструмент для автоматизации работы с Excel! Пробуйте, экспериментируйте и автоматизируйте рутину. 🚀