Как загрузить файл Excel в Python: полное руководство с примерами кода

Работа с данными из Excel в Python — одна из самых востребованных задач среди аналитиков, разработчиков и специалистов по автоматизации. В отличие от ручного копирования таблиц, программная загрузка позволяет обрабатывать тысячи строк за секунды, строить графики, очищать данные и интегрировать их с базами или API. Но как правильно импортировать XLS или XLSX в скрипт, если вы никогда этого не делали?

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

Современные версии Python предлагают десятки инструментов для работы с Excel, но далеко не все они одинаково полезны. Например, устаревшая библиотека xlrd до сих пор встречается в туториалах, хотя она не поддерживает формат XLSX, созданный после 2010 года. А популярный pandas может "съесть" память, если не оптимизировать чтение больших файлов. Мы сосредоточимся на актуальных решениях 2026 года и покажем, как адаптировать код под ваши нужды.

📊 Какую библиотеку вы обычно используете для работы с Excel в Python?
pandas
openpyxl
xlrd
Другую
Никакую

1. Подготовка: какие инструменты понадобятся

Прежде чем загружать Excel в Python, убедитесь, что на вашем компьютере установлены все необходимые компоненты. Минимальный набор включает:

  • 🐍 Python 3.8+ (более ранние версии могут не поддерживать актуальные библиотеки)
  • 📊 Pip (менеджер пакетов для установки библиотек)
  • 📑 Сами библиотеки: pandas, openpyxl или xlrd (для старых форматов)
  • 🗃️ Файл Excel (XLSX рекомендуется, так как XLS устарел)

Чтобы установить библиотеки, откройте терминал (или Command Prompt в Windows) и выполните команды:

pip install pandas openpyxl

Для старых файлов XLS (до 2003 года):

pip install xlrd==1.2.0

Важный нюанс: если вы работаете в Jupyter Notebook или Google Colab, библиотеки можно устанавливать прямо в ячейке кода, добавив восклицательный знак:

!pip install openpyxl
⚠️ Внимание: Библиотека xlrd версии 2.0+ не поддерживает файлы XLSX, созданные в Excel 2010 и новее. Для современных форматов используйте openpyxl или pandas с движком openpyxl.

2. Способ 1: Чтение Excel через Pandas (самый популярный)

Библиотека pandas — это "швейцарский нож" для работы с табличными данными. Она умеет не только читать Excel, но и обрабатывать данные, строить графики, экспортировать результаты. Главное преимущество — простой синтаксис. Например, чтобы загрузить файл data.xlsx в переменную, достаточно одной строки:

import pandas as pd

df = pd.read_excel("data.xlsx") # Загружаем первый лист

print(df.head()) # Показываем первые 5 строк

Но что делать, если в файле несколько листов? Или нужно прочитать только конкретные столбцы? Вот расширенные опции:

# Чтение конкретного листа по имени

df = pd.read_excel("data.xlsx", sheet_name="Лист1")

Чтение нескольких листов в словарь DataFrame

all_sheets = pd.read_excel("data.xlsx", sheet_name=None)

Чтение только столбцов A и C

df = pd.read_excel("data.xlsx", usecols=["A", "C"])

Оптимизация для больших файлов: Если ваш Excel весит сотни мегабайт, используйте параметры chunksize (чтение по частям) или укажите типы данных явно (dtype), чтобы сэкономить память:

# Чтение файла блоками по 1000 строк

chunk_iter = pd.read_excel("big_file.xlsx", chunksize=1000)

for chunk in chunk_iter:

process(chunk) # Ваша функция обработки

Указание типов данных для экономии памяти

df = pd.read_excel("data.xlsx", dtype={"Столбец1": "int32", "Столбец2": "category"})

Установить pandas и openpyxl|Проверить путь к файлу|Определить имя листа (если не первый)|Указать нужные столбцы (опционально)|Настроить параметры для больших файлов-->

3. Способ 2: OpenPyXL для работы со стилями и формулами

Если вам нужно не только прочитать данные, но и сохранить форматирование ячеек, формулы или стили (цвета, шрифты), то pandas не подойдёт — он возвращает только "сырые" данные. Здесь на помощь придёт OpenPyXL, которая работает на уровне ячеек и поддерживает все возможности современного Excel.

Пример чтения файла с сохранением формул:

from openpyxl import load_workbook

wb = load_workbook("formulas.xlsx", data_only=False) # data_only=False сохраняет формулы

sheet = wb["Лист1"]

Чтение значения ячейки A1 (может быть формулой)

cell_a1 = sheet["A1"]

print(f"Значение: {cell_a1.value}, Формула: {cell_a1.data_type == 'f'}")

С OpenPyXL вы также можете:

  • 🎨 Изменять стили ячеек (цвет фона, шрифт, границы)
  • 📊 Работать с объединёнными ячейками (merged cells)
  • 🔄 Сохранять исходное форматирование при записи обратно в файл

Ограничение: OpenPyXL не поддерживает старый формат XLS (только XLSX). Для XLS используйте xlrd (версии 1.2.0) или конвертируйте файл в современный формат.

Как конвертировать XLS в XLSX без потери данных?

1. Откройте файл в Excel.

2. Нажмите Файл → Сохранить как.

3. В поле "Тип файла" выберите Книга Excel (*.xlsx).

4. Сохраните под новым именем.

Внимание: При конвертации макросы (.xlsm) и некоторые старые функции могут потеряться!

4. Способ 3: xlrd для устаревших файлов XLS

Если вам достался файл в формате XLS (Excel 97–2003), то pandas и openpyxl не смогут его прочитать. Здесь поможет библиотека xlrd, но с важной оговоркой: нужно установить версию 1.2.0, так как более новые версии не поддерживают XLS.

Установка и пример использования:

pip install xlrd==1.2.0

import xlrd

Открываем файл

wb = xlrd.open_workbook("old_file.xls")

Получаем первый лист

sheet = wb.sheet_by_index(0)

Читаем значение из ячейки A1

print(sheet.cell_value(0, 0)) # ряд, столбец (нумерация с 0)

Проблемы и решения:

  • 🕒 Дата/время: xlrd читает даты как числа (количество дней с 1900 года). Чтобы конвертировать:
    from xlrd import xldate_as_tuple
    

    date_tuple = xldate_as_tuple(sheet.cell_value(0, 0), wb.datemode)

    print(date_tuple) # (год, месяц, день, час, минута, секунда)

  • 📉 Формулы: xlrd возвращает вычисленное значение, а не саму формулу. Для формул используйте OpenPyXL.
⚠️ Внимание: Файлы XLS имеют ограничение на 65 536 строк и 256 столбцов. Если ваш файл больше, его нужно разбить или конвертировать в XLSX.

5. Способ 4: Альтернативные библиотеки (xlwings, pyxlsb)

Иногда стандартные инструменты не подходят. Например:

  • 🔄 Вам нужно автоматизировать Excel (макросы, обновление связей)
  • 📈 Работать с бинарными файлами XLSB (Excel Binary Workbook)
  • 🖥️ Управлять открытым экземпляром Excel (как через VBA)

В таких случаях пригодятся специализированные библиотеки.

1. xlwings — для автоматизации Excel

Если вам нужно не просто читать данные, а управлять живым Excel (обновлять графики, запускать макросы), используйте xlwings. Она требует установленного Microsoft Excel на компьютере.

import xlwings as xw

Подключаемся к открытой книге или создаём новую

wb = xw.Book("report.xlsx")

Чтение диапазона как массива

data = wb.sheets["Лист1"].range("A1:C10").value

Запуск макроса

wb.macro("МойМакрос")()

2. pyxlsb — для бинарных файлов XLSB

Формат XLSB используется для очень больших файлов (миллионы строк). Чтобы его прочитать:

from pyxlsb import open_workbook

with open_workbook("huge_file.xlsb") as wb:

with wb.get_sheet(1) as sheet: # первый лист

for row in sheet.rows():

print(row)

6. Обработка ошибок и типичные проблемы

Даже с правильным кодом вы можете столкнуться с ошибками. Вот самые распространённые и способы их решения:

Ошибка Причина Решение
FileNotFoundError Python не находит файл по указанному пути Укажите полный путь (C:/Users/.../file.xlsx) или проверьте текущую директорию (os.getcwd())
KeyError: "Sheet1" Лист с таким именем не существует Проверьте имя листа в Excel (регистр важен!) или используйте индекс (sheet_name=0)
XLRDError: Unsupported format Пытаетесь открыть XLSX через xlrd 2.0+ Используйте openpyxl или установите xlrd==1.2.0
MemoryError Файл слишком большой для памяти Читайте файл по частям (chunksize в pandas) или используйте Dask

Как диагностировать проблему:

  1. Проверьте расширение файла (иногда XLSX сохранён как XLS и наоборот).
  2. Откройте файл в Excel и сохраните его заново (иногда это исправляет повреждённые данные).
  3. Попробуйте прочитать файл другой библиотекой (например, если pandas падает, попробуйте openpyxl).

7. Оптимизация и лучшие практики

Чтобы ваш код работал быстро и надёжно, следуйте этим рекомендациям:

  • Для больших файлов: Используйте dtype для указания типов данных и chunksize для постраничного чтения.
  • 🗃️ Для множества файлов: Храните пути в отдельном конфиге или используйте glob для пакетной обработки:
    import glob
    

    for file in glob.glob("data/*.xlsx"):

    df = pd.read_excel(file)

    # обработка...

  • 🔄 Для регулярных задач: Оберните чтение в функцию с обработкой ошибок:
    def safe_read_excel(file_path):
    

    try:

    return pd.read_excel(file_path)

    except Exception as e:

    print(f"Ошибка в файле {file_path}: {e}")

    return None

Совет по производительности: Если вам нужно прочитать только часть данных (например, первые 1000 строк), используйте параметр nrows:

df = pd.read_excel("big_file.xlsx", nrows=1000)

Это сэкономит память и время, особенно если файл весит гигабайты.

FAQ: Ответы на частые вопросы

Можно ли прочитать Excel из интернета (по URL) без скачивания?

Да, с помощью библиотеки pandas и модуля requests:

import pandas as pd

import requests

from io import BytesIO

url = "https://example.com/file.xlsx"

response = requests.get(url)

df = pd.read_excel(BytesIO(response.content))

Внимание: Убедитесь, что файл доступен для скачивания (нет авторизации) и его формат поддерживается (XLSX).

Как прочитать Excel с паролем?

Для защищённых файлов используйте библиотеку msoffcrypto-tool:

!pip install msoffcrypto-tool

from msoffcrypto import OfficeFile

file = OfficeFile(open("protected.xlsx", "rb"))

file.load_key(password="your_password")

decrypted = file.decrypt(open("decrypted.xlsx", "wb"))

Теперь читаем расшифрованный файл

df = pd.read_excel("decrypted.xlsx")

Почему русские буквы отображаются как "кракозябры"?

Проблема в кодировке. При чтении через pandas попробуйте указать encoding:

df = pd.read_excel("file.xlsx", encoding="utf-8")

Если не помогает, откройте файл в Excel и сохраните его с кодировкой UTF-8 (Файл → Сохранить как → Инструменты → Параметры веб-страницы → Кодировка: UTF-8).

Как записать DataFrame обратно в Excel?

Используйте метод to_excel:

df.to_excel("output.xlsx", index=False, sheet_name="Результаты")

Для сохранения нескольких листов:

with pd.ExcelWriter("output.xlsx") as writer:

df1.to_excel(writer, sheet_name="Лист1")

df2.to_excel(writer, sheet_name="Лист2")

Можно ли обновить данные в существующем файле Excel без перезаписи?

Да, с помощью openpyxl в режиме редактирования:

from openpyxl import load_workbook

wb = load_workbook("existing.xlsx")

sheet = wb["Лист1"]

sheet["A1"] = "Новое значение" # Обновляем ячейку

wb.save("existing_updated.xlsx")

Важно: Не сохраняйте в исходный файл сразу — сначала проверьте изменения в копии!