Существует несколько мощных библиотек для работы с 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)
Рекомендации по выбору:
- openpyxl — если нужна полная работа с .xlsx файлами (чтение/запись/стили)
- pandas — если вы работаете с данными и нужен анализ/обработка
- xlsxwriter — если нужно сложное форматирование и диаграммы
- 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 будут оптимальным решением.