Работа с Excel в Python: библиотека Openpyxl
В этой статье рассмотрим ключевые возможности библиотеки Python openpyxl и покажем, как применять этот инструмент для решения реальных рабочих задач.
Содержание
Во многих компаниях значительная часть рабочей рутины связана с Excel: собрать метрики, обновить ежемесячные отчеты, подготовить шаблоны для разных отделов. Задачи кажутся простыми, но отнимают много времени и требуют внимания к деталям. Любая ошибка в ячейке может привести к некорректной аналитике.
Чтобы минимизировать такие риски, рутинные процессы автоматизируют. Скрипт проверит данные, возьмет нужные значения, перенесет их в сводный документ и оформит в соответствии с шаблоном.

Что такое Openpyxl и когда ее использовать
Прежде чем углубиться в работу с Excel в Python, убедитесь, что знаете базу. Если вы только начинаете путь в программировании, обратите внимание на бесплатный курс «Основы Python». Он подходит всем, кто хочет применять этот язык в работе или учебе — достаточно лишь уверенно пользоваться компьютером. Здесь разбирают ключевые понятия, от переменных к функциям. Это фундамент, после которого легче переходить к более сложной информации.

Openpyxl — это открытая библиотека «Питона» для работы с Excel-файлами формата .xlsx. Она позволяет программно читать, изменять и создавать таблицы без необходимости открывать эксель вручную. Поддерживает как простые операции (изменение значений ячеек), так и продвинутые — стили, форматирование, фильтры, объединение ячеек, работу с формулами и создание графиков.
Ее используют для:
1. Работы с данными
- Экспорт из Python в Excel
- Импорт из Excel в Python
- Преобразование форматов (CSV → Excel)
2. Проверки качества
- Поиск ошибок в данных
- Проверка шаблонов на соответствие стандартам
3. Создания отчетов
- Генерация красивых таблиц с форматированием
- Добавление формул и диаграмм
- Создание многостраничных документов
4. Автоматизации рутины
- Сбор данных из многих файлов
- Создание отчетов по шаблону
- Ежемесячное обновление таблиц
Openpyxl vs Pandas vs другие библиотеки
Когда речь заходит о том, как прочитать эксель-файл в «Питоне», возникает логичный вопрос — чем пользоваться?
Openpyxl подходит, если нужно взаимодействовать с файлом «как есть». Например:
- заполнить шаблон отчета, куда руководитель уже добавил стили;
- изменить пару значений в готовой таблице и сохранить форматирование;
- обновить формулы или добавить фильтр.
То есть важно не только содержание, но и внешний вид.
Pandas — выбор для задач по анализу данных:
- быстро отфильтровать 50 тысяч строк;
- посчитать средние показатели по отделам;
- объединить несколько таблиц в одну.
На выходе вы чаще всего получаете сырые данные, а не красиво оформленный файл. Эта библиотека читает и записывает таблицы, но не сохраняет цвета, границы и прочее оформление.
Xlsxwriter пригодится, когда нужно создать новый файл с нуля и сделать его максимально аккуратным. Например, если вы генерируете отчет автоматически каждое утро. Минус — библиотека не открывает существующие файлы, только создает новые.
Кстати, в нашем блоге есть подробный разбор инструментов для анализа данных и ML. Статья поможет быстро разобраться, что выбрать под конкретную задачу.
Ключевые объекты Openpyxl
- Workbook — книга Excel, весь файл целиком. Содержит листы, настройки и методы для сохранения.
- Worksheet — отдельный лист внутри книги. Позволяет работать со строками, столбцами, диапазонами и структурой таблицы.
- Cell — ячейка. Основной строительный элемент: значение, формула, стиль, формат, комментарии.

Установка Openpyxl
Перед тем как переходить к работе с библиотекой, нужно правильно установить все инструменты, от которых она зависит. Ниже — пошаговая инструкция, рассчитанная даже на тех, кто никогда не работал с Python и командной строкой. Разберем, что именно нужно установить, зачем это делается, какие команды использовать в разных операционных системах и как избежать типичных ошибок.
Шаг 1. Подготовка
Откройте терминал или командную строку, в зависимости от вашей операционной системы.
- Windows: нажмите Win → введите cmd → откройте Командную строку (или используйте PowerShell).
- macOS: откройте Terminal (Spotlight → Terminal).
- Linux: откройте терминал (Ctrl+Alt+T или через меню).
В каждом шаге ниже выполняйте команды в этом окне.
Шаг 2. Установите Python
Зайдите на официальный сайт и скачайте последнюю стабильную версию для вашей ОС.
Важно для Windows
При установке поставьте галочку Add Python to PATH.
После установки введите в терминале:

Вы должны увидеть версию, например Python 3.11.4. Если команда не найдена — вернитесь к установке и убедитесь, что галочка PATH поставлена.
Шаг 3. Проверьте pip
Менеджер пакетов pip — это инструмент, с помощью которого устанавливаются библиотеки (в том числе openpyxl).
Проверьте:

Если pip не найден, выполните:

А затем снова:

Совет
Если в системе есть и python, и python3, в командах ниже используйте ту форму, которая у вас работает.
Иногда команда pip не срабатывает, потому что система не знает, где она лежит. Это случается:
- В Windows, если PATH настроен неправильно или pip не установился.
- В macOS/Linux, если PATH не включает путь к pip.
- Если установлено несколько версий Python, и одна мешает другой.
В таких случаях лучше использовать команду, привязанную к конкретной версии Python:

или в некоторых системах:

Шаг 4. Установите openpyxl
В терминале выполните одну из команд (ту, которая у вас работает):

Появятся строки загрузки и в конце — Successfully installed openpyxl…. Если требуется sudo на Linux/macOS:

Шаг 5. Сделайте быстрый тест
Создайте файл test_openpyxl.py с таким содержимым:

Запустите команду python test_openpyxl.py или python3 test_openpyxl.py.
В папке появится файл test.xlsx. Откройте — в ячейке A1 должно быть ok.
Шаг 6. Используйте виртуальную среду
Виртуальная среда — это «отдельная папка» с собственными библиотеками. Рекомендуется, если у вас много проектов и не хочется, чтобы они конфликтовали.
Создать и использовать:

После активации в командной строке обычно появляется префикс (myenv). Все, что вы установите в активной среде, не повлияет на другие проекты.
Полезно
- Если python и pip ссылаются на разные версии — используйте python -m pip install ….
- Если команда требует прав администратора — добавьте sudo на macOS/Linux или запустите терминал от имени администратора в Windows.
- Если при активации PowerShell блокирует скрипты, откройте обычный cmd или временно разрешите выполнение.
Первые шаги: создание и загрузка файлов
Когда openpyxl установлена, можно переходить к работе с файлами. В этом разделе разберем самые первые и самые частые действия. Простые операции — фундамент, на котором строится любая автоматизация: от заполнения отчетов до подготовки шаблонов и преобразования данных.
Как создать новый Excel-файл
Это займет всего несколько строк.

После запуска скрипта рядом появится файл new_file.xlsx — полностью рабочий документ, который можно открыть в Excel.
Лайфхаки для начинающих
- Всегда сохраняйте файл после всех изменений.
Библиотека openpyxl не сразу записывает изменения сразу, а только в момент save().
Если что-то пропало, значит, вы забыли сохранить.
- Создавайте сразу структуру таблицы.
Если вы заранее знаете, какие вам нужны колонки, то заполняйте заголовки сразу:
ws.append([«Имя», «Продажи», «Премия»])
Этот метод добавляет строку целиком, что удобно.
- Вы можете создавать несколько листов.
ws2 = wb.create_sheet(title=»Отчет_2″)
Полезно, когда формируете один файл с разными разделами.
- Если код долго выполняется, не открывайте эксель-файл параллельно.
Excel может блокировать файл, и скрипт выдаст ошибку «Permission denied».
Как открыть существующий файл
Работа с реальными данными часто начинается не с создания, а с открытия уже существующего файла: отчета от коллеги, выгрузки из CRM, документа-шаблона или таблицы, которую нужно автоматически обновить. В openpyxl это тоже делается очень просто.

- load_workbook() загружает уже существующий файл.
- wb.active — первый лист в книге (если лист не переименован).
- .value — так читают значение из ячейки.
После изменений файл нужно обязательно пересохранить.
Лайфхак
При открытии больших отчетов добавьте параметр read_only=True:
wb = load_workbook(«big_file.xlsx», read_only=True)
Это ускорит загрузку и снизит расход памяти, но редактировать такой файл нельзя.
Работа с листами
В openpyxl лист — это объект Worksheet, и с ним можно делать практически все: создавать новые страницы, переименовывать существующие, перемещать, копировать и удалять. Ниже — основные операции, которые пригодятся в любой автоматизации.
Получить активный лист
ws = wb.active
Это первый лист, который видит Excel при открытии файла.
Получить лист по названию
ws = wb[«Отчет»]
Если название неизвестно, сначала посмотрите список: print(wb.sheetnames)
Создать новый лист
ws_new = wb.create_sheet(«Итоги»)
По умолчанию лист появляется в конце. Чтобы создать в начале:
wb.create_sheet(«Черновик», 0)
Переименовать лист
ws.title = «Данные_2025»
Удалить лист
del wb[«Черновик»]
или
wb.remove(ws)
Скопировать лист
Полезно при работе с шаблонами.
copy_ws = wb.copy_worksheet(ws)
copy_ws.title = «Отчет_копия»
При копировании листов через copy_worksheet() копируются только ячейки, стили, гиперссылки и комментарии. Изображения, диаграммы и некоторые другие атрибуты не переносятся.
Кроме того, нельзя копировать листы между разными книгами, а также в режиме только для чтения или записи.
Важно
- Не используйте спецсимволы в названиях листов.
Excel запрещает :, *, ?, /, \, [, ]
Переименование с такими символами вызовет ошибку.
- Учитывайте регистр и особенности букв при обращении к листам.
wb[«Отчет»] и wb[«Отчёт»] — разные вещи.
- Максимальная длина названия листа — 31 символ.
Иначе Excel просто не откроет файл или обрежет название.
Чтение данных из ячеек
Этот базовый навык при работе с openpyxl. В реальных задачах это может быть проверка показателей в отчете, извлечение данных для аналитики, автоматизация сложных Excel-шаблонов или подготовка итоговых сводок.
Чтение конкретной ячейки
Если нужно получить значение из одной ячейки:
value = ws[«A1»].value
print(value)
.value — это свойство, которое возвращает реальное содержимое ячейки: текст, число, дату или формулу. Если в таблице много формул и вам нужны только результаты, используйте data_only=True при загрузке файла.
Чтение ячейки по координатам (строка или столбец)
Полезно, если адрес строится программно.
value = ws.cell(row=2, column=3).value # C2
Чтение строки целиком
for cell in ws[1]: # первая строка
print(cell.value)
Удобно, если первая строка — заголовки.
Чтение столбца целиком
for cell in ws[«B»]: # весь столбец B
print(cell.value)
Используется, когда нужно обработать один параметр, например «Выручка».
Обратите внимание, эти способы читают все ячейки в строке или столбце, включая пустые, вплоть до максимально возможных границ листа. Например, до строки 1 048 576. Это может быть неэффективно для больших файлов.
Чтобы работать только с заполненной частью таблицы, лучше использовать ws.iter_rows() без указания границ или вместе с ws.dimensions.
Чтение диапазона
Позволяет работать с фрагментом таблицы.
for row in ws[«A1:C3»]:
for cell in row:
print(cell.value)
Представьте, что вы работаете аналитиком в компании, где каждый менеджер по продажам раз в неделю отправляет вам эксель-отчет. В каждом файле есть столбец с итоговой выручкой:
| Менеджер | Неделя | Выручка |
| Иванов | 3 | 156000 |
Вам нужно собрать выручку из всех файлов в один список и затем построить общий график продаж.
Пример обработки одного файла:

Теперь вы можете запустить это в цикле по всем файлам, агрегировать данные и автоматически готовить сводный отчет. Без openpyxl такую работу пришлось бы выполнять вручную.
Полезно знать
- Даты читаются как объекты datetime.
- Пустые ячейки возвращают None.
- Формулы возвращают сами себя.
Если файл был сохранен Excel и открыт с data_only=True, то в .value будет результат вычисления формулы на момент последнего сохранения.
Если файл создан openpyxl и в него записаны формулы, то при открытии с data_only=True вы, скорее всего, получите None, так как движок формул openpyxl их не вычисляет.
- Большие таблицы — только через iter_rows().
Так вы не загрузите в память все сразу, что критично для файлов 50–200 МБ.
- Старайтесь заранее знать границы таблицы.
Чтобы ускорить код, задавайте min_row, max_row, min_col, max_col.
Запись и изменение данных
Это ключ к автоматизации любых рутинных процессов. Openpyxl делает работу с Excel удобной и гибкой: можно прописывать значения, формулы, делать массовые правки, добавлять строки, вставлять данные из Python-скриптов или внешних источников (API, базы данных, CRM).
Запись значения в ячейку
Самый простой способ:
ws[«A1»] = «Отчет за январь»
ws[«B2»] = 125000
Значение может быть числом, строкой, датой или даже формулой.
Запись через координаты (удобно при циклах)
ws.cell(row=5, column=3, value=4500)
Полезно, когда данные приходят в виде списка или словаря.
Добавление строки
Если нужно расширить таблицу:
ws.append([«Иванов», «Продажи», 185000])
Команда ws.append() добавляет строку в первую пустую строку после имеющихся данных. Если у вас есть отступы или пустые строки внутри таблицы, это может сработать некорректно. Метод ищет самую нижнюю заполненную строку в столбце A (или в первом столбце, если A пуст) и добавляет данные ниже.
Добавление нескольких строк из списка
rows = [
[«Петров», «Продажи», 192000],
[«Сидорова», «Маркетинг», 118000]
]
for row in rows:
ws.append(row)
Допустим, вы получили данные из CRM:
crm_data = [
{«manager»: «Иванов», «revenue»: 150000},
{«manager»: «Петров», «revenue»: 210000},
]
И хотите автоматически перенести их в шаблон Excel.

В итоге получаем готовый отчет без ручного копирования данных.
Изменение существующих данных
Если нужно скорректировать уже имеющиеся значения:
ws[«C5»] = ws[«C5»].value + 10000
Всегда проверяем, что значение не None и является числом!
Массовое изменение данных
for row in ws.iter_rows(min_row=2, max_col=3):
if row[2].value < 100000:
row[2].value = 100000 # минимальная планка
Вернемся к нашей воображаемой таблице менеджеров.
| Менеджер | Выручка | Бонус |
| Иванов | 350000 | 25000 |
| Петров | 120000 | 10000 |
Нужно повысить бонус тем, кто перевыполнил план (выше 300 000).

Подобный сценарий встречается повсеместно, от HR-отчетов до финансовых моделей.
Запись формул
ws[«D2»] = «=SUM(B2:C2)»
Excel пересчитает формулу при открытии файла.
Удаление данных
Очистить ячейку:
ws[«A5»].value = None
Удалить строку:
ws.delete_rows(3)
Удалить несколько строк:
ws.delete_rows(5, amount=3)
Важно
- Если хотите избежать случайных правок — сохраняйте в новый файл.
wb.save(«sales_report_final.xlsx»)
- Всегда проверяйте тип данных в ячейке (isinstance(value,(int, float))) перед арифметическими операциями, чтобы избежать ошибок.
Продвинутые техники работы с openpyxl
Менеджеры хотят получать не просто CSV с цифрами, а аккуратные таблицы, формулы, фильтры и графики. Продвинутые инструменты openpyxl позволяют собрать такие отчеты автоматически и под корпоративные стандарты.
Например, HR-отдел формирует данные по сотрудникам: библиотека помогает автоматически раскрасить KPI-показатели в зависимости от результатов, добавить формулы расчета бонусов и построить график эффективности по месяцам.
Работа со стилями и форматированием
Можно программно управлять практически каждым аспектом внешнего вида документа: шрифтами, выравниванием, цветами, границами, заливками, форматами чисел и структурой таблиц.
К примеру, автоматически подсвечивать товары с низкой маржой красным, а топы продаж — зеленым. Это позволяет руководителю за секунду понять структуру ассортимента без детального анализа строк.
Openpyxl поддерживает:
- создание корпоративных шаблонов с единым стилем;
- выделение важных метрик цветом;
- форматирование дат, валют, процентов;
- настройку ширины столбцов, выравнивание текста, перенос строк;
- использование условного форматирования.
Работа с формулами
Допустим, отдел продаж часто формирует еженедельный отчет по выручке. С помощью кода легко:
- выгрузить данные;
- проставить формулы подсчета маржи, НДС, комиссий;
- добавить формулы сравнения с предыдущей неделей;
- автоматически вычислять процентное изменение.
Openpyxl позволяет вставлять в клетки формулы в их естественном синтаксисе, а эксель затем автоматически пересчитывает их при открытии файла. Можно создавать динамические расчеты: суммирование, средние значения, работу с датами, VLOOKUP/XLOOKUP, IF, агрегатные функции, формулы с диапазонами и многое другое.
Добавление фильтров и работа с ними
Openpyxl поддерживает добавление автоматических фильтров для любого диапазона, включая таблицы с десятками тысяч строк. А еще позволяет:
- сортировать конкретный диапазон;
- превращать диапазон в полноценную Excel-таблицу;
- сохранять пользовательские фильтры при генерации файлов;
- комбинировать фильтры с форматированием.
Создание простых графиков
Это библиотека Python поддерживает создание основных типов диаграмм: линейных, столбчатых, круговых, гистограмм, комбинированных и др. А также допускает:
- выбирать тип диаграммы;
- указывать диапазоны данных и подписей;
- управлять размером и положением графика;
- добавлять несколько рядов данных;
- размещать графики на отдельных листах.
Частые ошибки
- Пытаться открыть файлы .xls вместо .xlsx.
Openpyxl работает только с форматом .xlsx.
Как избежать: перед загрузкой файла проверяйте его расширение.
- Забыть вызвать workbook.save().
После внесения изменений файл не обновляется.
Как избежать: всегда завершайте скрипт сохранением. Особенно если генерируете отчеты автоматически.
- Работать с большими файлами без оптимизации.
Большие таблицы грузятся медленно или потребляют много памяти.
Как избежать: используйте режимы read_only=True и write_only=True, если файл не нужно модифицировать полностью.
- Испытывать проблемы со стилями при массовом применении.
Большие циклы со стилями сильно замедляют работу.
Как избежать: применяйте стили к диапазонам или заранее создавайте объект стиля и переиспользуйте его.
- Допускать конфликты версий Python и pip.
Команда pip install openpyxl не работает или ставит не ту версию.
Как избежать: запускайте установку через: python -m pip install openpyxl.
Шпаргалка по основным методам Openpyxl

Заключение
Упростить работу в Экселе с помощью библиотеки openpyxl — это отличный способ прокачать навыки Python на реальных задачах. Вы работаете с файлами, структурой данных, обработкой информации и постепенно выходите на более продвинутые сценарии. Такие практические навыки особенно полезны в аналитике, финансах, маркетинге, управлении проектами и других сферах, где таблицы являются частью ежедневной работы.