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

Что получится в конце
К концу этого гайда у вас будет рабочий скрипт на Python, который открывает файл Excel, читает из него данные, дописывает новые строки и сохраняет результат в новый файл. Ни одной формулы вручную. На всё уйдёт около 30–40 минут, если вы делаете это впервые. Программировать до этого не нужно — команды можно копировать и запускать.
Работаем с библиотекой openpyxl (версия 3.1.x на момент написания). Она умеет только формат .xlsx — тот, что создаёт современный Excel. Старый .xls она не откроет, и файлы Google Sheets тоже: их сначала нужно скачать как .xlsx.
Что нужно иметь до начала
- Python 3.9 или новее. Проверьте: откройте терминал (в Windows — «Командная строка» или PowerShell, на Mac — «Терминал») и наберите
python --version. Если версия ниже 3.9 или команда не найдена — установите Python с python.org, при установке в Windows поставьте галочку «Add Python to PATH». - Установленный openpyxl. Как поставить — первый шаг ниже.
- Файл Excel для опытов. Создайте в Excel файл
отчёт.xlsx, впишите в первую строку заголовки: в ячейку A1 — «Товар», B1 — «Цена», C1 — «Количество». Ниже добавьте пару строк с данными. Сохраните в ту же папку, где будете держать скрипт.
openpyxl не запускает Excel и не требует, чтобы он был установлен. Библиотека читает и пишет файл напрямую, как обычный текстовый документ со сложной структурой. Скрипт работает даже на сервере без офисных программ.
Шаг 1. Установить openpyxl
В терминале выполните:
pip install openpyxlПроверка: должна появиться строка вроде Successfully installed openpyxl-3.1.5. Если увидели pip: command not found, попробуйте pip3 install openpyxl или python -m pip install openpyxl.
Шаг 2. Открыть файл и прочитать одну ячейку
Создайте файл read.py в той же папке, что и отчёт.xlsx, и впишите:
from openpyxl import load_workbook
# Открываем существующий файл
kniga = load_workbook("отчёт.xlsx")
# Берём активный лист (тот, что открыт по умолчанию)
list = kniga.active
# Читаем значение ячейки A1
print(list["A1"].value)Запустите: python read.py. Проверка: в терминале появится слово «Товар» — содержимое ячейки A1.
Как адресуются ячейки
Есть два способа обратиться к ячейке. По имени, как в Excel: list["B2"]. И по номерам строки и столбца: list.cell(row=2, column=2) — это та же B2. Нумерация начинается с единицы, а не с нуля: строка 1 — это первая строка, столбец 1 — это A.
Шаг 3. Пройти по всем строкам
Чаще всего нужно не одна ячейка, а весь список. Замените содержимое read.py:
from openpyxl import load_workbook
kniga = load_workbook("отчёт.xlsx")
list = kniga.active
# Идём по строкам, начиная со второй (первая — заголовки)
for stroka in list.iter_rows(min_row=2, values_only=True):
tovar = stroka[0] # столбец A
cena = stroka[1] # столбец B
kol = stroka[2] # столбец C
print(f"{tovar}: {cena} руб. x {kol} шт.")Проверка: в терминале построчно выведутся ваши товары. Параметр values_only=True отдаёт именно значения ячеек, а не служебные объекты — с ними работать проще.
Шаг 4. Дописать строку и посчитать сумму
Теперь добавим новую строку и колонку с итогом «цена × количество». Создайте write.py:
from openpyxl import load_workbook
kniga = load_workbook("отчёт.xlsx")
list = kniga.active
# Заголовок для новой колонки D
list["D1"] = "Сумма"
# Считаем сумму для каждой строки с данными
for nomer, stroka in enumerate(
list.iter_rows(min_row=2, values_only=True), start=2):
cena = stroka[1]
kol = stroka[2]
if cena is not None and kol is not None:
list.cell(row=nomer, column=4, value=cena * kol)
# Добавляем новую строку в конец таблицы
list.append(["Пакет", 15, 100, 15 * 100])
# Сохраняем в НОВЫЙ файл, чтобы не испортить исходник
kniga.save("отчёт_итог.xlsx")
print("Готово, файл отчёт_итог.xlsx создан")Запустите python write.py. Проверка: в папке появится отчёт_итог.xlsx. Откройте его в Excel — в колонке D будут суммы, а внизу добавится строка «Пакет».
Метод append сам находит первую пустую строку снизу и вписывает туда список значений по порядку: первый элемент в столбец A, второй в B и так далее.
Шаг 5. Создать файл с нуля
Если исходного файла нет и таблицу надо собрать самому:
from openpyxl import Workbook
kniga = Workbook() # новая пустая книга
list = kniga.active
list.title = "Продажи" # имя листа
list.append(["Товар", "Цена"]) # строка заголовков
list.append(["Молоко", 89])
list.append(["Хлеб", 45])
kniga.save("новый.xlsx")Проверка: появится файл новый.xlsx с листом «Продажи» и тремя строками. Обратите внимание: для чтения используется load_workbook, а для создания с нуля — Workbook. Это разные вещи.
Если не получилось
FileNotFoundError: [Errno 2] No such file or directory: 'отчёт.xlsx'— Python не нашёл файл. Он ищет его в той папке, из которой вы запустили скрипт, а не там, где лежит скрипт. Запускайте терминал из нужной папки или укажите полный путь к файлу.ModuleNotFoundError: No module named 'openpyxl'— библиотека не установлена или установлена в другой Python. Повторите шаг 1 именно той командой, которой запускаете скрипт: если запускаетеpython, ставьте черезpython -m pip install openpyxl.zipfile.BadZipFile: File is not a zip file— вы пытаетесь открыть старый.xlsили повреждённый файл. Откройте его в Excel и пересохраните как.xlsx. openpyxl со старым форматом не работает.TypeError: unsupported operand type(s) for *— в ячейке с ценой или количеством лежит текст, а не число (например, «нет данных»). Проверьте исходный файл: числа не должны быть записаны как текст.- Файл не сохраняется, ошибка
PermissionError— целевой файл открыт в Excel. Закройте его в Excel и запустите скрипт снова.
Что важно помнить про формулы и стили
openpyxl хранит формулы как текст, а не считает их. Если в исходном файле в ячейке была формула вроде =B2*C2, при чтении вы получите либо саму формулу строкой, либо последнее посчитанное Excel значение — зависит от параметра data_only при открытии. Если нужны именно посчитанные числа, откройте так: load_workbook("отчёт.xlsx", data_only=True) — но значения там появятся только если файл до этого хотя бы раз открывал и сохранял сам Excel.
Что делать дальше
Освоив чтение и запись, следующим шагом посмотрите на:
- объединение данных из нескольких файлов в один — цикл по списку имён файлов;
- форматирование ячеек: шрифт, заливка, границы через
openpyxl.styles— если отчёт уходит людям, а не в другую программу; - библиотеку pandas — если файлов много и нужны фильтры, группировки и сводные таблицы. Она читает Excel в таблицу-датафрейм одной командой, а openpyxl использует под капотом для формата
.xlsx.
Официальная документация openpyxl — первое место, куда стоит заглядывать, когда понадобится что-то за пределами этого гайда: имена методов и их параметры там всегда актуальны для текущей версии.
Проверка грамотности: Орфография, пунктуация, стиль — с объяснением каждой правки
Спросить за 10 ₽Источники: openpyxl — официальная документация, openpyxl на PyPI
Частые вопросы
У меня Python 3.8, а не 3.9 — сработает ли?
Скрипт открывает старый файл .xls и падает с ошибкой. Что делать?
Почему вместо чисел из ячеек с формулами я получаю текст вроде =B2*C2?
Испорчу ли я исходный файл, если что-то пойдёт не так?
Файл не сохраняется с ошибкой PermissionError. В чём дело?
Нумерация строк и столбцов с нуля или с единицы?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.