Работа с файлами Excel в Python: полное руководство по обработке

Иван Корнев·18 августа 2026·3 мин

Работа с файлами Excel в Python решается через Pandas и OpenPyXL. Для открытия используйте read_excel, для сохранения — to_excel, для конвертации в PDF — Aspose.Cells, а для сжатия — модули gzip или zipfile.

Оглавление

Открытие и чтение файлов

Стандартные средства работы с текстовыми файлами не подходят для бинарных или XML-структур XLSX/XLS, поэтому используются специализированные библиотеки.

  • Pandas: Наиболее популярный инструмент для аналитики. Функция pandas.read_excel() позволяет загружать данные в DataFrame, поддерживая форматы XLSX, XLS и ODS через движки openpyxl или xlrd.
  • OpenPyXL: Библиотека для низкоуровневой работы с файлами .xlsx. Позволяет читать и модифицировать ячейки, стили и структуру листа без загрузки всего файла в память как таблицы данных.
  • Специфические форматы: Для чтения бинарных файлов XLSB или старых XLS могут потребоваться дополнительные библиотеки, такие как pyxlsb или xlrd, так как стандартные движки не всегда их поддерживают.

Сохранение и запись данных

Сохранение результатов обработки осуществляется теми же библиотеками, что и чтение.

  • Запись через Pandas: Метод to_excel() используется для экспорта DataFrame обратно в файл Excel. Он поддерживает запись на конкретный лист и настройку форматирования через интеграцию с openpyxl.
  • Прямая запись в OpenPyXL: Позволяет создавать файлы с нуля или изменять существующие, сохраняя изменения методом workbook.save(filename).

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

Конвертация форматов

Конвертация часто требуется для интеграции с другими системами или подготовки отчетов.

  • Excel ↔ CSV: Выполняется штатными средствами Pandas (read_excel / to_csv) или специализированными скриптами для пакетной обработки многостраничных книг.
  • Excel → PDF: Требует специализированных библиотек (например, Aspose.Cells, Spire.XLS или e-iceblue), так как openpyxl и pandas не умеют рендерить визуальное представление листа в PDF.
  • PDF → Excel: Обратная конвертация также возможна с помощью библиотек типа Aspose.PDF, которые распознают табличные структуры в документах.

Сжатие файлов

Файлы XLSX сами по себе являются ZIP-архивами, но дополнительное сжатие может потребоваться для передачи или архивного хранения.

  • GZIP: Стандартный модуль Python gzip позволяет сжимать Excel-файлы в формат .gz, что эффективно уменьшает размер при хранении резервных копий.
  • ZIP-архивация: Встроенный модуль zipfile или библиотеки вроде Aspose.ZIP позволяют упаковывать один или несколько Excel-файлов в архив с настройкой уровня компрессии.
  • Онлайн-сжатие: Существуют веб-сервисы, которые оптимизируют внутреннюю структуру XLSX (удаляют метаданные, сжимают изображения), уменьшая размер файла до 90% без потери данных, что полезно для единичных задач.

Частые ошибки

  1. Попытка сохранить PDF через Pandas или OpenPyXL. Эти библиотеки работают только с данными и структурой, но не с визуальным рендерингом. Используйте Aspose.Cells или аналоги.
  2. Ошибка доступа к файлу (PermissionError) при сохранении. Возникает, если файл открыт в другой программе (например, в самом Excel) или дескриптор не был закрыт в предыдущей итерации цикла.
  3. Ошибка чтения формата XLSB. Стандартный движок openpyxl не поддерживает .xlsb. Для таких файлов необходимо явно устанавливать и указывать библиотеку pyxlsb.

FAQ

Как открыть файл XLSB в Python?
Используйте библиотеку pyxlsb. Она специально разработана для чтения бинарных файлов Excel, которые не поддерживаются стандартными движками Pandas или OpenPyXL.

Можно ли сжать уже существующий XLSX файл без потери данных?
Да. Поскольку XLSX уже является архивом, дополнительное сжатие без потерь достигается либо архивацией в .zip/.gz, либо использованием онлайн-сервисов, которые удаляют скрытые метаданные и оптимизируют встроенные изображения.

Почему возникает утечка памяти при обработке множества файлов Excel?
Чаще всего причина в незакрытых дескрипторах файлов или загрузке огромных таблиц целиком в память через Pandas без указания конкретных листов или диапазонов. Используйте OpenPyXL для итеративного чтения или явно закрывайте объекты после сохранения.