Найти в Дзене
RuMicro

Работа с Excel в Python

Существует несколько мощных библиотек для работы с Excel в Python. Я расскажу о самых популярных и дам примеры для каждой. Наиболее популярная библиотека для чтения и записи файлов Excel (.xlsx). bash pip install openpyxl python from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils import get_column_letter
# Создаем новую книгу
wb = Workbook()
# Выбираем активный лист
ws = wb.active
ws.title = "Отчет"
# Записываем данные
ws['A1'] = 'Имя'
ws['B1'] = 'Возраст'
ws['C1'] = 'Город'
# Добавляем данные
data = [
['Анна', 25, 'Москва'],
['Петр', 30, 'СПб'],
['Иван', 28, 'Казань']
]
for row in data:
ws.append(row)
# Стилизация заголовков
for col in range(1, 4):
cell = ws.cell(row=1, column=col)
cell.font = Font(bold=True, color="FFFFFF")
cell.fill = PatternFill(start_color="366092", end_color="366092", fill_type="solid")
cell.alignment = Alignment(horizontal="center")
# Автоподбор ширины колонок
for col i
Оглавление

Существует несколько мощных библиотек для работы с Excel в Python. Я расскажу о самых популярных и дам примеры для каждой.

1. openpyxl — для работы с .xlsx файлами

Наиболее популярная библиотека для чтения и записи файлов Excel (.xlsx).

Установка

bash

pip install openpyxl

Примеры использования

Создание и запись файла

python

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils import get_column_letter

# Создаем новую книгу
wb = Workbook()

# Выбираем активный лист
ws = wb.active
ws.title = "Отчет"

# Записываем данные
ws['A1'] = 'Имя'
ws['B1'] = 'Возраст'
ws['C1'] = 'Город'

# Добавляем данные
data = [
['Анна', 25, 'Москва'],
['Петр', 30, 'СПб'],
['Иван', 28, 'Казань']
]

for row in data:
ws.append(row)

# Стилизация заголовков
for col in range(1, 4):
cell = ws.cell(row=1, column=col)
cell.font = Font(bold=True, color="FFFFFF")
cell.fill = PatternFill(start_color="366092", end_color="366092", fill_type="solid")
cell.alignment = Alignment(horizontal="center")

# Автоподбор ширины колонок
for col in ws.columns:
max_length = 0
column = col[0].column_letter
for cell in col:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = (max_length + 2)
ws.column_dimensions[column].width = adjusted_width

# Сохраняем файл
wb.save('example.xlsx')

Чтение файла

python

from openpyxl import load_workbook

# Загружаем существующий файл
wb = load_workbook('example.xlsx')

# Получаем список листов
print(wb.sheetnames)

# Выбираем лист
ws = wb['Отчет']

# Читаем все данные
for row in ws.iter_rows(values_only=True):
print(row)

# Читаем с определенного диапазона
for row in ws.iter_rows(min_row=2, max_row=4, min_col=1, max_col=3, values_only=True):
print(row)

# Доступ к конкретной ячейке
cell_value = ws['A2'].value
print(cell_value)

2. pandas — для анализа и обработки данных

Отлично подходит для работы с табличными данными и их анализа.

Установка

bash

pip install pandas openpyxl

Примеры использования

Чтение Excel

python

import pandas as pd

# Чтение Excel файла
df = pd.read_excel('example.xlsx', sheet_name='Отчет')
print(df)

# Чтение всех листов
all_sheets = pd.read_excel('example.xlsx', sheet_name=None)

# Чтение с указанием диапазона
df = pd.read_excel('example.xlsx', sheet_name='Отчет',
usecols='A:C', skiprows=1, nrows=3)

Запись в Excel

python

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Font

# Создаем DataFrame
data = {
'Имя': ['Анна', 'Петр', 'Иван'],
'Возраст': [25, 30, 28],
'Город': ['Москва', 'СПб', 'Казань']
}
df = pd.DataFrame(data)

# Простая запись
df.to_excel('output.xlsx', sheet_name='Данные', index=False)

# Запись с форматированием
with pd.ExcelWriter('output_formatted.xlsx', engine='openpyxl') as writer:
df.to_excel(writer, sheet_name='Данные', index=False)

# Получаем workbook и worksheet
workbook = writer.book
worksheet = writer.sheets['Данные']

# Форматируем заголовки
for cell in worksheet[1]:
cell.font = Font(bold=True, color="FFFFFF")

Анализ данных

python

# Фильтрация
adults = df[df['Возраст'] >= 18]
print(adults)

# Группировка
age_by_city = df.groupby('Город')['Возраст'].mean()
print(age_by_city)

# Добавление столбца
df['Возраст_категория'] = df['Возраст'].apply(lambda x: 'Взрослый' if x >= 18 else 'Ребенок')

3. xlrd / xlwt — для старых форматов .xls

python

import xlrd
import xlwt

# Чтение .xls
book = xlrd.open_workbook('old_file.xls')
sheet = book.sheet_by_index(0)

for row in range(sheet.nrows):
print(sheet.row_values(row))

# Запись .xls
wb = xlwt.Workbook()
ws = wb.add_sheet('Sheet1')
ws.write(0, 0, 'Hello')
wb.save('output.xls')

4. xlsxwriter — для сложного форматирования

python

import xlsxwriter

workbook = xlsxwriter.Workbook('formatted.xlsx')
worksheet = workbook.add_worksheet()

# Форматы
bold = workbook.add_format({'bold': True})
money_format = workbook.add_format({'num_format': '$#,##0.00'})
percent_format = workbook.add_format({'num_format': '0.00%'})

# Запись с форматированием
worksheet.write('A1', 'Заголовок', bold)
worksheet.write('B2', 1234.56, money_format)
worksheet.write('C3', 0.25, percent_format)

# Создание диаграммы
chart = workbook.add_chart({'type': 'column'})
chart.add_series({'values': '=Sheet1!B2:B10'})
worksheet.insert_chart('E5', chart)

workbook.close()

5. pyexcel — универсальная библиотека

python

import pyexcel as p

# Чтение
data = p.get_array(file_name='example.xlsx')
print(data)

# Запись
p.save_as(array=[[1, 2, 3], [4, 5, 6]], dest_file_name='output.xlsx')

# Получение словаря
records = p.get_records(file_name='example.xlsx')
for record in records:
print(record)

Рекомендации по выбору:

  1. openpyxl — если нужна полная работа с .xlsx файлами (чтение/запись/стили)
  2. pandas — если вы работаете с данными и нужен анализ/обработка
  3. xlsxwriter — если нужно сложное форматирование и диаграммы
  4. xlrd/xlwt — только для старых .xls файлов

Полезные приемы:

python

# Работа с большими файлами (openpyxl в read-only режиме)
from openpyxl import load_workbook

wb = load_workbook('large_file.xlsx', read_only=True)
ws = wb.active

for row in ws.iter_rows(values_only=True):
# Обработка строки
pass

# Объединение ячеек (openpyxl)
ws.merge_cells('A1:C1')
ws.unmerge_cells('A1:C1')

# Формулы (openpyxl)
ws['D2'] = '=SUM(B2:C2)'

# Условное форматирование (xlsxwriter)
worksheet.conditional_format('B2:B10', {
'type': 'cell',
'criteria': '>',
'value': 100,
'format': workbook.add_format({'bg_color': '#FFC7CE'})
})

Выбор библиотеки зависит от ваших конкретных задач. Для большинства случаев openpyxl + pandas будут оптимальным решением.