Авторизация
Сброс пароля
Разработка внутреннего портала для биотехнологической компании
Заказчик: Биотехнологическая компания.
Страница кейса/результат: https://www.simbirsoft.com/portfolio/razrabotka-vnutrennego-portala-dlya-biotekhnologicheskoy-kompanii/

Разработали внутреннюю мини-библиотеку на C# для автоматического преобразования Excel-файлов в C#-модели. Вместо ручного написания логики чтения каждой колонки разработчику достаточно было описать соответствие колонок модели с помощью атрибутов.
1. Вводная задача от заказчика, проблематика, цели
Бизнес-задача:
В нескольких сервисах внутреннего портала требовалось регулярно импортировать данные из Excel. При каждом новом сценарии разработчикам приходилось заново реализовывать схожую логику обработки файлов, что увеличивало трудозатраты и усложняло поддержку.
Задача разработки:
Устранить дублирование кода и создать единый переиспользуемый механизм импорта Excel. Требовалось, чтобы для подключения нового сценария достаточно было описать C#-модель и сопоставить ее поля с колонками файла через атрибуты.
2. Описание реализации кейса и творческого пути по поиску оптимального решения
Разработчик проанализировал существующую реализацию импорта Excel в нескольких сервисах и выделил общую логику.
Спроектировал программный интерфейс (API
) библиотеки на основе атрибутов, например [ExcelColumn("Название колонки")], и реализовал механизм сопоставления колонок Excel со свойствами C#-модели.
Затем добавил автоматическое преобразование основных типов: string, числовые типы, DateTime, DateOnly, enum, nullable-типы и т.д.Также реализовал обработку обязательных и необязательных колонок, пустых ячеек и ошибок преобразования.
Добавил возможность пользовательского преобразования значений. Реализовал поддержку нескольких листов Excel.
Провел интеграцию библиотеки с несколькими существующими сервисами.
В качестве основы использовал ClosedXML, который уже применялся в проектах.
Вся первая рабочая версия библиотеки была реализована примерно за один рабочий день.
3. Результаты сотрудничества
- Устранили дублирование логики импорта Excel в нескольких сервисах.
- Создали единый переиспользуемый механизм для новых сценариев импорта.
- Сократили время добавления нового импорта с нескольких дней до нескольких часов. По оценке команды, каждый последующий импорт экономил около 4–8 часов разработки.
- Снизили количество ошибок при чтении ячеек и преобразовании типов.
- Упростили бизнес-логику: разработчику достаточно описать модель и атрибуты.
- Внедрили решение в нескольких сервисах внутреннего портала и стали применять его как внутренний переиспользуемый инструмент.
4. Заключение
Бизнес-эффект
Основной бизнес-эффект — снижение трудозатрат команды разработки и ускорение реализации новых сценариев импорта Excel.
- Время разработки нового импорта сократилось примерно с 1–2 рабочих дней до нескольких часов.
- При каждом последующем использовании библиотеки экономилось в среднем 4–8 часов разработки.
- Единая реализация снизила количество ошибок в логике импорта и преобразования данных.
- Библиотека использовалась в нескольких сервисах, поэтому эффект распространялся на несколько команд и проектов.
- Окупаемость: если считать вложением один день разработки библиотеки, то затраты на ее создание окупались уже после нескольких новых импортов. При условной экономии 6 часов на каждом импорте — примерно после двух использований.
Трудности
Основная сложность заключалась не в чтении Excel, а в создании универсального механизма преобразования данных.
Особое внимание уделили:
- автоматическому определению и преобразованию типов свойств;
- корректной обработке nullable-типов и пустых ячеек;
- преобразованию enum и дат из разных форматов;
- понятной обработке ошибок с указанием строки и колонки, где возникла проблема;
- разделению обязательных и необязательных колонок;
- проектированию интерфейса библиотеки так, чтобы для простого импорта требовался минимум кода;
- возможности расширять библиотеку без изменения уже существующего кода.
Технологии
- C# / .NET
- ClosedXML — работа с Excel-файлами
- Reflection — анализ атрибутов и свойств C#-моделей
- Custom Attributes — описание соответствия колонок Excel свойствам модели
- Generics — универсальный API парсинга различных моделей
- xUnit — модульное тестирование библиотеки


