Всем привет! Работа с 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 и вдохновит на создание собственных проектов.
ссылка на оригинал статьи https://habr.com/ru/articles/824050/
Добавить комментарий