Разработка Python-модуля для заполнения Excel-шаблонов
Задача
Создать модуль на Python, который будет заполнять готовый Excel-шаблон (.xlsx) данными на основе конфигурационных файлов. Модуль должен аккуратно вписывать данные, не нарушая исходную структуру, форматирование и функциональность документа.
Требования к решению
Технический стек
- Python версии 3.10 или выше.
- Основная библиотека для работы с Excel:
openpyxl.
Входные данные
template.xlsx - исходный шаблон файла.
data.json - словарь с данными для заполнения.
mapping.json - файл конфигурации, связывающий данные с ячейками в шаблоне.
Выходные данные
result.xlsx - итоговый заполненный файл (исходный шаблон должен оставаться неизменным).
Функциональность модуля
- Заполнение одиночных значений: Внесение скалярных данных (числа, строки, даты) в конкретные ячейки, указанные в конфигурации.
- Заполнение табличных блоков: Заполнение данными из списков в фиксированные диапазоны ячеек (табличные блоки). Шаблон содержит два таких блока.
- Обработка типов данных: Корректное преобразование строковых представлений дат и чисел в соответствующие типы Excel.
- Сохранение целостности шаблона: Все формулы, условное форматирование, стили и объединенные ячейки должны оставаться работоспособными.
Критически важные ограничения и правила
- Запрещено изменять структуру листа: Нельзя вставлять или удалять строки/столбцы (
insert_rows и аналогичные операции запрещены).
- Фиксированные диапазоны для таблиц: Табличные блоки имеют заранее определенное максимальное количество строк (
max_rows). Если данных меньше - незаполненные строки нужно очистить или скрыть (в зависимости от настройки). Если данных больше - заполняются только первые max_rows строк, остальные игнорируются.
- Защита формул: Если целевая ячейка для записи содержит формулу - модуль должен считать это ошибкой конфигурации или шаблона и прекратить выполнение.
- Работа с объединенными ячейками: Данные можно записывать только в верхнюю левую ячейку объединенного диапазона. Попытка записи в любую другую часть диапазона должна вызывать ошибку.
- Совместимость: Итоговый файл должен корректно открываться и отображаться в популярных онлайн-редакторах таблиц (проверяется вручную).
Ожидаемые артефакты от исполнителя
- Исходный код Python-модуля.
- Файл
README.md с инструкцией по установке и запуску.
- Демонстрационный скрипт
demo_fill.py, который наглядно показывает процесс заполнения шаблона.
- Набор базовых модульных тестов (с использованием
pytest), покрывающих три ключевых сценария:
- Заполнение с пустыми списками данных.
- Стандартное заполнение.
- Сценарий, когда количество переданных данных превышает
max_rows.