Добавить в корзинуПозвонить
Найти в Дзене

Работа с Excel-настройками для плагина. Библиотека ClosedXML

Всем привет! Сегодня я решу небольшую прикладную задачу — создам Excel-файл с правилами заполнения параметров, а потом заполню параметры в элементах Revit по этим правилам. Создадим Excel-файл из 2 столбцов: в первом столбце напишем категорию элемента, а во втором — значение параметра Комментарии для этой категории. Добавим этот файл в ресурсы приложения, чтобы он скомпилировался в итоговый dll. (Тут вопрос спорный, в реальном приложении вы сможете указать путь к файлу, а потом менять этот файл для всех пользователей, не обновляя плагин. Но здесь я просто покажу заодно, как работать с ресурсами). Напишем код, который будет читать этот Excel и записывать значения в нужные элементы Для начала создадим простой Excel-файл, описанный выше, и сохраним его в папку проекта Зададим ему Build Action — Embedded Resource. Далее добавим Nuget-пакет ClosedXML. Для Revit ранее 2025 самая новая версия 0.105.0 работает с ошибками, поэтому я ставлю версию 0.102.2, которая лучше совместима с .NET Framew
Оглавление

Всем привет! Сегодня я решу небольшую прикладную задачу — создам Excel-файл с правилами заполнения параметров, а потом заполню параметры в элементах Revit по этим правилам.

Что сделаем:

Создадим Excel-файл из 2 столбцов: в первом столбце напишем категорию элемента, а во втором — значение параметра Комментарии для этой категории.

Добавим этот файл в ресурсы приложения, чтобы он скомпилировался в итоговый dll. (Тут вопрос спорный, в реальном приложении вы сможете указать путь к файлу, а потом менять этот файл для всех пользователей, не обновляя плагин. Но здесь я просто покажу заодно, как работать с ресурсами).

Напишем код, который будет читать этот Excel и записывать значения в нужные элементы

Программируем

Для начала создадим простой Excel-файл, описанный выше, и сохраним его в папку проекта

Зададим ему Build Action — Embedded Resource.

-2

Далее добавим Nuget-пакет ClosedXML. Для Revit ранее 2025 самая новая версия 0.105.0 работает с ошибками, поэтому я ставлю версию 0.102.2, которая лучше совместима с .NET Framework и не кидает ошибку в рантайме.

-3

Теперь предварительная работа готова, начнём писать код.

Для данной таблицы я сделаю так: прочитаю её, занесу все данные в словарь, где ключ — имя категории, значение — значение параметра.

-4

Что здесь интересного:

  • На строках 44-46 мы обращаемся к ресурсу, который попадает внутрь dll (по сути, путь к нему — Namespace.Filename, причём в данном случае namespace — это разделённый точками путь к файлу из его папок
  • Далее я обращаюсь к Excel-файлу через классы из ClosedXML. В данном примере я исхожу из того, что в таблице только 1 лист (в вашем случае это будет необязательно), а далее беру только имеющие значения строки RowUsed(), а внутри строки — только имеющие значения ячейки. В данном примере у меня по 2 ячейки в строке, поэтому я проверяю число ячеек со значением.
  • В реальной жизни число колонок может быть переменным. Тогда, например, в первую ячейку колонки мы запишем имя параметра, а внутри колонки — значения. Обратиться к ячейке можно очевидным образом:
sheet.Cell(row, column);

Далее просто записываем результат во все элементы:

-5

Запускаем команду — результат получаем как ожидается:

-6

Заключение

Тут я привёл максимально базовый пример, для реальной работы вам надо будет придумать логику на его основе. Но в общем и целом, вы можете начать с того, что написано у меня. Исходный код можно найти на моём GitHub.
А также не забывайте подписываться на
мой телеграм-канал о Revit API и до новых встреч!

-7