Всем привет! Работа с Excel файлами — одна из частых задач, встречающихся в повседневной разработке. В этой статье рассмотрим, как с помощью Python можно создавать, заполнять, и стилизовать Excel файлы. Для этого мы будем использовать библиотеки pandas, openpyxl и faker (для тестов).
Для начала установим библиотеки:
pip install pandas xlsxwriter openpyxl faker
Создание Пустого Excel Файла
Начнем с создания пустого Excel файла с заданными колонками. Для этого мы используем pandas
и xlsxwriter
.
import os
import pandas as pd
def create_empty_excel(columns: list, filename: str, sheet_name: str = 'Sheet1'):
df = pd.DataFrame(columns=columns)
if not os.path.exists('excel_files'):
os.makedirs('excel_files')
filepath = os.path.join('excel_files', filename)
excel_writer = pd.ExcelWriter(filepath, engine='xlsxwriter')
df.to_excel(excel_writer, index=False, sheet_name=sheet_name, freeze_panes=(1, 0))
excel_writer._save()
return filepath
Этот код создает пустой Excel файл с указанными колонками и сохраняет его в папку excel_files
. Если папка не существовала в корневой дирректории, то она будет создана.
Обратите внимание на то, что я закрепил верхнюю строку. Как по мне - это удобно.
В функции видим запись engine='xlsxwriter'
, это означает, что используется XlsxWriter в качестве движка для записи данных в файл Excel.
Тестируем
def create_tabel_users():
filepath = create_empty_excel(columns=['Имя', 'Адрес', 'Email', 'Телефон'],
filename='users.xlsx')
create_tabel_users()
Парсинг Excel Файла в Список Словарей
После создания Excel файла, возможно, потребуется считать данные из него и преобразовать в удобный для обработки формат — список словарей.
def parse_excel_to_dict_list(filepath: str, sheet_name='Sheet1'):
# Загружаем Excel файл в DataFrame
df = pd.read_excel(filepath, sheet_name=sheet_name)
# Преобразуем DataFrame в список словарей
dict_list = df.to_dict(orient='records')
return dict_list
Этот простой метод загружает данные из Excel файла в DataFrame
, а затем преобразует их в список словарей.
Сейчас я добавлю некоторые данные в созданную ранее эксель таблицу и воспользуюсь данной функцией.
Так выглядит моя таблица в обычном виде:
Код:
def get_data_to_exel():
info = parse_excel_to_dict_list('users.xlsx')
for i in info:
print(i)
get_data_to_exel()
Смотрим:
Создание Excel Файла из Списка Словарей
Теперь создадим Excel файл из списка словарей и применим стилизацию для улучшения внешнего вида.
def create_excel_from_dict_list(dict_list: list, output_filename: str, sheet_name='Sheet1'):
# Создаем директорию, если она не существует
if not os.path.exists('excel_files'):
os.makedirs('excel_files')
filepath = os.path.join('excel_files', output_filename)
# Создаем новую книгу Excel
wb = Workbook()
ws = wb.active
ws.title = sheet_name
# Записываем данные из списка словарей в Excel
if dict_list:
header = list(dict_list[0].keys())
ws.append(header) # Записываем заголовки
for row in dict_list:
ws.append([row[col] for col in header])
# Настраиваем стили для красивого вида
header_style = NamedStyle(name='header')
header_style.font = Font(bold=True, color='FFFFFF')
header_style.alignment = Alignment(horizontal='center', vertical='center')
header_style.fill = PatternFill(start_color='4F81BD', end_color='4F81BD', fill_type='solid')
border_style = Border(
left=Side(border_style='thin', color='000000'),
right=Side(border_style='thin', color='000000'),
top=Side(border_style='thin', color='000000'),
bottom=Side(border_style='thin', color='000000')
)
header_style.border = border_style
cell_style = NamedStyle(name='cell')
cell_style.alignment = Alignment(horizontal='left', vertical='center')
cell_style.border = border_style
for cell in ws[1]: # Применяем стиль к заголовкам
cell.style = header_style
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
for cell in row:
cell.style = cell_style
# Автоматическое изменение ширины столбцов
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(cell.value)
except:
pass
adjusted_width = (max_length + 2)
ws.column_dimensions[column].width = adjusted_width
# Сохраняем файл
wb.save(filepath)
return filepath
Этот код создает Excel файл из списка словарей и применяет стили для заголовков и ячеек.
Генерация тестовых данных
Для тестирования наших функций можно использовать библиотеку faker
, которая позволяет генерировать фейковые данные.
from faker import Faker
def generate_fake_user():
fake = Faker('ru_RU')
return {
'name': fake.name(),
'address': fake.address(),
'email': fake.email(),
'phone_number': fake.phone_number(),
'birth_date': fake.date_of_birth(),
'company': fake.company(),
'job': fake.job()
}
def get_fake_users(count: int):
return [generate_fake_user() for _ in range(count)]
Функция get_fake_users
генерируют фейковые данные русских пользователей в том количестве, которое вы передадите, что позволяет протестировать создание и обработку Excel файлов.
Пример использования
Теперь объединим все части кода и создадим полный рабочий пример:
def main():
# создадим 100 фейковых пользователей
fake_users = get_fake_users(100)
# создадим таблицу с пользователями
create_excel_from_dict_list(fake_users, 'fake_users.xlsx')
# получим путь к таблице с пользователями
filepath = os.path.join('excel_files', 'fake_users.xlsx')
# получим всех пользователей из таблицы
all_users = parse_excel_to_dict_list(filepath)
for i in all_users:
print(i)
main()
Как вы увидели, тут мы создали 100 фейковых пользователей и поместили их в таблицу с именем 'fake_users.xlsx'. Затем мы вывели в консоль все данные о пользователях в виде списка питоновских словарей (через цикл for).
Сама таблицв:
Заключение
Используя Python и библиотеки pandas
, openpyxl
и faker
, можно легко создавать, заполнять, и стилизовать Excel файлы для различных нужд. Надеюсь, эта статья поможет вам лучше понять, как работать с Excel файлами в Python и вдохновит на создание собственных проектов.