Работа с данными из Excel в Python — одна из самых востребованных задач среди аналитиков, разработчиков и специалистов по автоматизации. В отличие от ручного копирования таблиц, программная загрузка позволяет обрабатывать тысячи строк за секунды, строить графики, очищать данные и интегрировать их с базами или API. Но как правильно импортировать XLS или XLSX в скрипт, если вы никогда этого не делали?
Многие новички сталкиваются с ошибками при первом знакомстве: то кодировка слетает, то библиотека не находит файл, то данные читаются криво. Эта статья поможет избежать типичных ловушек. Мы разберём 5 проверенных способов загрузки Excel в Python — от простейшего чтения одной таблицы до работы с формулами и стилями ячеек. Вы узнаете, какую библиотеку выбрать для вашей задачи, как обработать большие файлы и что делать, если Excel упорно не хочет открываться.
Современные версии Python предлагают десятки инструментов для работы с Excel, но далеко не все они одинаково полезны. Например, устаревшая библиотека xlrd до сих пор встречается в туториалах, хотя она не поддерживает формат XLSX, созданный после 2010 года. А популярный pandas может "съесть" память, если не оптимизировать чтение больших файлов. Мы сосредоточимся на актуальных решениях 2026 года и покажем, как адаптировать код под ваши нужды.
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 используйте
1. Откройте файл в Excel. 2. Нажмите 3. В поле "Тип файла" выберите 4. Сохраните под новым именем.xlrd (версии 1.2.0) или конвертируйте файл в современный формат.
Как конвертировать XLS в XLSX без потери данных?
Файл → Сохранить как.Книга Excel (*.xlsx)..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_tupledate_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 |
Как диагностировать проблему:
- Проверьте расширение файла (иногда XLSX сохранён как XLS и наоборот).
- Откройте файл в Excel и сохраните его заново (иногда это исправляет повреждённые данные).
- Попробуйте прочитать файл другой библиотекой (например, если
pandasпадает, попробуйтеopenpyxl).
7. Оптимизация и лучшие практики
Чтобы ваш код работал быстро и надёжно, следуйте этим рекомендациям:
- ⚡ Для больших файлов: Используйте
dtypeдля указания типов данных иchunksizeдля постраничного чтения. - 🗃️ Для множества файлов: Храните пути в отдельном конфиге или используйте
globдля пакетной обработки:import globfor 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")
Важно: Не сохраняйте в исходный файл сразу — сначала проверьте изменения в копии!