OpenPyXL для работы с Excel в Python: разбираемся на практике
2026-02-21 19:08 Diff

#статьи

  • 20 ноя 2025
  • 0

Автоматизируем работу с Excel: чтение, запись, оформление отчётов и многое другое.

Иллюстрация: Оля Ежак для Skillbox Media

Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.

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

Python помогает решить эти проблему с помощью библиотек автоматизации работы с файлами Excel. Самая популярная из них — OpenPyXL.

Содержание

OpenPyXL — это библиотека на Python, которая помогает работать с файлами Excel с помощью кода в IDE (среда разработки). Она позволяет:

  • открывать существующие или создавать новые файлы Excel;
  • читать и записывать данные в ячейки, изменять их содержимое и добавлять новые;
  • настраивать ширину столбцов и высоту строк;
  • создавать и удалять листы, а также менять их порядок;
  • работать с формулами, результат которых Excel сам пересчитает при открытии;
  • применять форматирование — настраивать шрифт, цвет, границы и другие параметры оформления;
  • создавать простые диаграммы из данных;
  • работать со сводными таблицами.

С OpenPyXL удобно автоматизировать рутинные операции: сформировать отчёт, разложить данные по листам, выделить отдельные строки, подготовить таблицу в удобном для чтения виде и сохранить её без ручной работы. То, что в интерфейсе Excel требует десятков кликов, в Python с OpenPyXL выполняется всего несколькими строками кода.

Перед тем как начать работать с OpenPyXL, библиотеку нужно установить. Для этого используется pip — стандартная программа для установки пакетов в Python.

Сначала убедимся, что Python и pip уже есть на компьютере. Для этого введём в терминале или командной строке команды проверки версий:

python --version pip --version

Если обе команды возвращают номера версий, значит, всё в порядке. Теперь установим пакет openpyxl, который добавляет в Python поддержку работы с файлами Excel:

pip install openpyxl

После этого библиотека готова к использованию. Это можно проверить в интерактивной консоли Python или в любой IDE:

import openpyxl

Если ошибок не появилось, установка прошла успешно.

Для создания пустого файла Excel в OpenPyXL есть класс Workbook. Напишем код:

from openpyxl import Workbook workbook = Workbook() workbook.save("example.xlsx")

Мы создали файл и сохранили его с помощью метода save(). В скобках указывается наименование документа. Если открыть новый файл в Excel, там будет один пустой лист.

Чаще на практике требуется работать с уже существующим файлом, а не создавать его с нуля. Для загрузки документа используется функция load_workbook():

from openpyxl import load_workbook workbook = load_workbook("example.xlsx")

Теперь переменная workbook ссылается на файл, с которым можно выполнять любые действия: читать данные, добавлять новые листы, менять значения в ячейках и так далее.

Когда мы создаём новую книгу, OpenPyXL автоматически добавляет один лист с именем Sheet. Чтобы к нему обратиться, напишем код:

page = workbook.active

Свойство active возвращает текущий рабочий лист.

Чтобы создать новый лист в существующем файле, используется метод create_sheet(). В скобках указывается имя нового листа:

workbook.create_sheet("Отчёт") workbook.save("example.xlsx")

Теперь в файле будет два листа — Sheet, который создаётся по умолчанию, и Отчёт. К каждому из них можно обращаться по отдельности:

page = workbook["Отчёт"]

Если мы хотим удалить лист из файла, то используем метод remove(). В скобках указываем название переменной с таблицей и название листа:

workbook.remove(workbook["Sheet"])

После изменений сохраним файл:

workbook.save("example.xlsx")

Основные задачи при работе с Excel — записывать и читать значения в таблице. В OpenPyXL доступ к ячейке осуществляется двумя способами: по адресу и через координаты. Рассмотрим оба варианта.

Адрес ячейки в Excel состоит из буквы и числа: буква обозначает столбец, а число — строку. Например, A1 — это ячейка в первом столбце и первой строке, B3 — ячейка во втором столбце и третьей строке.

Запишем данные в ячейку А1 таблицы:

page["A1"] = "Привет, Excel!"

Теперь в первой строке и первом столбце появится текст.

Прочитать значение из ячейки можно так:

value = page["A1"].value print(value)

На экран будет выведено её содержимое.

Координаты ячейки в Excel — это номер строки и номер столбца. Если адрес ячейки — B1, то её координаты — это (1, 2): первая строка и второй столбец.

Попробуем добавить число в ячейку, обратившись к ней по координатам:

page.cell(row=2, column=3, value=100)

Теперь в ячейку на пересечении второй строки и третьего столбца записано число 100. Координаты — удобный способ работать с ячейками, когда мы перебираем их циклами для чтения или добавления значений.

Когда данных много, работать с ними по одной ячейке неудобно. В OpenPyXL есть методы для перебора строк и столбцов.

Чтобы пройтись по строкам, используем цикл for и метод iter_rows:

for row in page.iter_rows(min_row=1, max_row=3, values_only=True): print(row)

Цикл будет последовательно получать группы ячеек — по одной строке за раз. Внутри iter_rows мы указываем, какие строки нужно прочитать:

  • Параметр min_row задаёт начальную строку, а max_row — последнюю.
  • Параметр values_only=True означает, что вместо объектов ячеек метод вернёт только содержащиеся в них данные без информации о стиле, координатах или других свойствах.

В теле цикла print(row) выводит каждую строку в виде кортежа, где каждый элемент — это значение отдельной ячейки.

Аналогичный способ есть и для столбцов. В нём используется метод iter_cols, в параметрах которого задаём начальный и конечный столбец:

for col in page.iter_cols(min_col=1, max_col=2, values_only=True): print(col)

С помощью этих методов информацию из таблиц Excel можно превратить в различные типы данных Python: списки, словари, кортежи — и работать с ними дальше.

В OpenPyXL доступно управление внешним видом таблицы: изменение ширины столбцов, настройка шрифтов и цветов, а также объединение ячеек. Это помогает оформить файл Excel, не открывая его в табличном редакторе.

По умолчанию все столбцы одинаковой ширины. Но этот показатель можно настроить для каждого из них отдельно:

page.column_dimensions["A"].width = 20

Теперь ширина первого столбца будет равна 20 символам. Схожим образом настраивается высота строк:

page.row_dimensions[3].height = 25

Для оформления текста используется класс Font, а для заливки ячеек — PatternFill.

В OpenPyXL цвета задаются в HEX-системе RGB. Каждый цвет записывается шестнадцатеричным кодом из шести символов, где два символа отвечают за красный канал, два — за зелёный и два — за синий. Учить кодировку цветов наизусть не обязательно, можно быстро найти их на HTML Color Picker на W3Schools.

Выделим в таблице первую строку: ячейки сделаем с синей заливкой, а текст — белым:

from openpyxl.styles import Font, PatternFill page["A1"].font = Font(bold=True, color="FFFFFF") # белый жирный текст page["A1"].fill = PatternFill("solid", fgColor="4F81BD") # синяя заливка ячейки

Иногда требуется объединить несколько ячеек в одну, например для заголовка. Для этого используется метод merge_cells()

page.merge_cells("A1:C1") page["A1"] = "Отчёт за месяц"

Он принимает диапазон ячеек для объединения. В нашем случае — от A1 до C1. Обратите внимание, что ячейка получает адрес по первому значению — A1.

В OpenPyXL можно добавлять формулы в ячейки, но есть важный нюанс: библиотека не выполняет вычисления, а лишь записывает формулу в файл. Подсчёт произойдёт уже в Excel, когда таблица будет открыта в программе.

Формула в OpenPyXL задаётся как строка, начиная со знака =. Напишем код для сложения значений двух ячеек:

page["A1"] = 10 page["A2"] = 20 page["A3"] = "=SUM(A1:A2)"

В ячейке A3 появится формула =SUM(A1:A2). Если открыть файл в Excel, программа автоматически посчитает сумму и покажет результат — 30.

Попробуем прочесть значение ячейки с формулой:

print(page["A3"].value)

Получим результат в виде строки =SUM(A1:A2), а не число 30. OpenPyXL хранит формулу, но не результат вычисления.

Если требуется провести анализ данных, то придётся воспользоваться другими инструментами, например библиотекой Pandas или Matplotlib.

OpenPyXL применяют в разных задачах. Посмотрим несколько примеров, где библиотека экономит время.

Чтобы работать с данными в Python, необходимо перенести их из табличного файла. Сделать это можно с помощью знакомого цикла for и метода iter_rows. Посмотрим на пример их использования.

Представим, что у нас есть таблица акционеров компании, где в первом столбце записано имя человека, а во втором — фамилия. Наша задача — написать каждому из них приглашение на собрание акционеров. Это можно сделать вручную, но адресатов так много, что придётся очень долго копировать и перепроверять данные во избежание ошибок. Чтобы сэкономить время, напишем код, который будет читать таблицу построчно, собирать из двух ячеек одно обращение и выводить его на экран.

from openpyxl import load_workbook # открываем Excel-файл book = load_workbook("people.xlsx") page = book.active # перебираем строки с именами и фамилиями for row in page.iter_rows(min_row=2, values_only=True): name, surname = row # пропускаем пустые строки if not name or not surname: continue message = f"Уважаемый(ая) {name} {surname}, приглашаем вас на собрание акционеров!" print(message)

Файл загружается знакомым load_workbook, и чтение данных идёт построчно. Первая строка обычно бывает заголовком таблицы, поэтому чтение начинается со второй. В сам цикл мы добавили оператор continue для пропуска строк, в которых нет имени или фамилии.

Внутри цикла формируется строка с приглашением, которая выводится на печать. Теперь можем не переживать, что пропустим кого-то из таблицы.

У нас есть файл sales.xlsx со списком продаж. Нужно подготовить отчёт для коллег: посчитать стоимость объёма каждой позиции, умножив количество на цену, и добавить новый столбец с итогом.

Логика работы будет такой:

  • Откроем файл в Pandas, превратим данные в DataFrame (структура данных библиотеки) и проведём необходимый расчёт. Готовую таблицу сохраним в новый файл Excel report.xlsx.
  • Откроем его в OpenPyXL и приведём в порядок: укажем шрифт заголовков, добавим заливку и увеличим ширину первого столбца для удобства чтения.

Чтобы это сделать, напишем код:

import pandas as pd from openpyxl import load_workbook from openpyxl.styles import Font, PatternFill # Читаем исходный файл через Pandas df = pd.read_excel("sales.xlsx") # Создаём итоговый столбец с результатом расчёта df["Стоимость"] = df["Количество"] * df["Цена"] # Записываем результат в новый файл Excel df.to_excel("report.xlsx", index=False) # Открываем файл через OpenPyXL wb = load_workbook("report.xlsx") ws = wb.active # Задаём шрифт, заливку и ширину первого столбца ws["A1"].font = Font(bold=True) ws["A1"].fill = PatternFill("solid", fgColor="CCCCCC") ws.column_dimensions["A"].width = 25 # Сохраняем изменения wb.save("report.xlsx")

Работая с файлами Excel через OpenPyXL, важно понимать, какие форматы поддерживаются и какие есть ограничения. Это поможет избежать ошибок и сэкономить время.

  • .xlsx — основной формат, с которым работает OpenPyXL. Это современный стандарт Excel, начиная с версии 2007.
  • .xlsm — файлы с макросами. OpenPyXL открывает и сохраняет их, но не умеет работать с самими макросами.

OpenPyXL не поддерживает.xls — старый формат Excel (до 2007 года). Для таких файлов используют библиотеку xlrd или предварительно сохраняют документ в формате .xlsx.

  • Формулы. Как мы уже обсуждали, OpenPyXL не пересчитывает формулы, а лишь сохраняет их в файле. Итоговые значения появятся только при открытии документа в Excel. Поэтому делать сложные расчёты с помощью библиотеки не получится.
  • Стили и оформление. OpenPyXL поддерживает большинство базовых стилей (шрифты, цвета, заливки), но не все сложные элементы, доступные в табличном редакторе. Например, условное форматирование реализовано частично, поэтому лучше всего делать его в OpenPyXL.
  • Если у вас старый файл .xls, сохраните его в Excel как .xlsx перед работой.
  • Для сложных задач — например, с анализом данных — используйте комбинацию: Pandas для обработки данных и OpenPyXL для оформления и экспорта файла.
  • Проверяйте результат в Excel, особенно если используете формулы или сложное форматирование.

Мы разобрали основные возможности OpenPyXL: от установки и первых шагов до работы с листами, ячейками, стилями и формулами. Эта библиотека пригодится, когда требуется автоматизировать рутинные операции в Excel, подготовить отчёт или оформить таблицу.

Советы для новичков:

  • Начинайте с простых практических задач: создание файла, заполнение ячеек, сохранение документа и так далее.
  • Не бойтесь официальной документации: примеры кода понятны даже на английском, а перевод можно сделать онлайн-сервисами.
  • Комбинируйте OpenPyXL с Pandas для анализа.
  • Для построения сложных визуализаций комбинируйте OpenPyXL с Matplotlib. OpenPyXL умеет создавать стандартные графики Excel, но поддерживает только базовые типы диаграмм: линейные, столбчатые, круговые и гистограммы. В Matplotlib можно работать с точной настройкой шкал, менять отдельные элементы графика, комбинировать несколько систем координат, накладывать слои и создавать сложные визуализации.


Python для всех

Вы освоите Python на практике и создадите проекты для портфолио — телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер — руководитель отдела разработки в «Сбере».

Пройти бесплатно

Бесплатный курс по разработке на Python ➞
Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер — руководитель отдела разработки в «Сбере». Пройти курс