Спецификации из Revit в Excel и обратно: три способа
Встроенный экспорт, Dynamo и плагины: сравниваем по времени, деньгам и риску. Где теряются данные и как загрузить правки обратно в Revit, не сломав модель.
Сметчик просит выгрузку по всем дверям: марка, размеры, отделка, помещение. Через час он присылает файл обратно с правками в трёх колонках и вопросом «а можно сразу в модель?».
Вот тут и начинается разница между способами. Выгрузить умеет каждый. Загрузить обратно, ничего не поломав, умеют не все и не всегда.
Ниже три рабочих маршрута, которыми я пользуюсь на разных задачах, с честной ценой каждого.
Способ 1. Встроенный экспорт
Открываем спецификацию, «Файл» → «Экспорт» → «Отчёты» → «Спецификация». Revit предлагает сохранить .txt, спрашивает про разделители и заголовки.
Дальше файл открывается в Excel через «Данные» → «Из текста», с указанием кодировки. Именно тут ломается кириллица. Revit пишет UTF-16, Excel по умолчанию ждёт что-то другое, на выходе вместо «Дверь ДГ 21-9» получается набор вопросительных знаков. Лечится выбором Unicode при импорте, но каждый раз вручную.
Что ещё теряется:
- многоуровневая группировка превращается в обычные строки, вложенность видна только по отступам;
- итоги и промежуточные суммы приезжают как текстовые строки посреди таблицы;
- форматирование чисел уходит целиком, «2 100» становится текстом с неразрывным пробелом;
- обратной загрузки нет вообще, это односторонний путь.
Время: 2 минуты на выгрузку плюс 5 на приведение таблицы в вид, который не стыдно отправить. Цена: ноль. Годится, когда нужно один раз что-то отдать смежникам и забыть.
Способ 2. Dynamo
Здесь начинается управляемость. Граф собирает элементы по категории, читает параметры и пишет их в лист Excel в нужном вам порядке.
Минимальный набор нод: Categories → All Elements of Category → Element.GetParameterValueByName → List.Transpose → Data.ExportExcel. Транспонирование почти всегда обязательно: Dynamo собирает данные колонками, а Excel ждёт строки.
# Что делает граф, на языке человека
элементы = все двери проекта
для каждой двери:
строка = [Марка, Ширина, Высота, Уровень, Комментарий]
записать строки на лист "Двери" начиная с ячейки A2
Три подводных камня, о которых узнаёшь на второй раз.
Data.ExportExcel требует установленного Excel. Нода работает через COM, то есть реально открывает приложение в фоне. На машине без офиса граф падает. На 6000 строк выгрузка занимала у меня около трёх минут, и всё это время Excel лучше не трогать. Альтернатива: Data.ExportCSV, работает мгновенно и без офиса, но теряет типы данных и требует правильного разделителя.
Единицы. Длины Revit хранит во внутренних единицах (футы). Часть нод отдаёт значения уже пересчитанными в единицы проекта, часть нет. Проверка одна: выгрузите три двери и сверьте ширину с тем, что видно в свойствах. Если вместо 900 стоит 2.95, вы смотрите на футы.
Пустые параметры. Ноды возвращают null, и Excel получает пустые ячейки без предупреждения. Незаполненный параметр в модели и ошибка чтения параметра выглядят в выгрузке одинаково.
Время: первый граф собирается за 2-4 часа, дальше запуск за минуту. Цена: ваше время. Плюс в том, что тот же граф умеет читать Excel обратно нодой Data.ImportExcel.
Способ 3. Плагины
Готовые инструменты закрывают обе стороны обмена. Из бесплатного я использовал SheetLink от DiRoots: ставится за 5 минут, поддерживает Revit 2019-2024, выгружает выбранные категории и параметры в .xlsx и загружает их обратно. Из платного известен Ideate BIMLink, он умнее и дороже, лицензия считается на рабочее место.
Что даёт плагин против самописного графа:
- сохраняет служебный столбец с ElementId, по нему и находит элементы при обратной загрузке;
- показывает список изменений до применения, а не после;
- умеет отсеивать read-only параметры, вместо того чтобы падать на них.
Что не даёт: гибкости. Нужна выгрузка со сложной логикой (посчитать площадь отделки по помещениям с учётом типа стен и вычесть проёмы) - плагин так не умеет, там нужен Dynamo.
Сравнение
| Критерий | Встроенный экспорт | Dynamo | Плагин |
|---|---|---|---|
| Первая настройка | 2 минуты | 2-4 часа | 15 минут |
| Повторный запуск | 5-7 минут | 1 минута | 2 минуты |
| Обратная загрузка | нет | да, руками | да, из коробки |
| Кириллица | ломается | нормально | нормально |
| Сложная логика | нет | да | нет |
| Цена | 0 | время | 0 или лицензия |
| Риск испортить модель | нулевой | высокий | средний |
Обратная загрузка: где рвётся
Самая опасная операция во всей теме. Данные из Excel идут в модель, и цена ошибки другая: неверная выгрузка это потерянный час, неверная загрузка это испорченная модель, о чём вы узнаете через неделю.
Якорь. Элемент ищется по ElementId. Уникальный номер в пределах файла, но не между файлами и не после пересоздания элемента. Удалили дверь и поставили заново - id новый, а в таблице старый. Загрузка либо промахнётся, либо запишет параметры не туда. Правило простое: между выгрузкой и загрузкой модель не меняем.
Excel-самодеятельность. Артикул 007 превращается в 7. Значение 1.5 в русской локали иногда становится датой. Длинный код спецификации сворачивается в 1,2E+11. Всё это Excel делает сам, без спроса, и в модель приезжает мусор. Формат колонок ставьте текстовым до того, как отдадите файл смежнику.
Параметры типа против параметров экземпляра. В спецификации они выглядят одинаково. При записи разница огромная: правка типового параметра у одной двери меняет его у всех дверей этого типа. Строчку поправили одну, изменились сорок. Разбор того, что где хранится, есть в статье про автозаполнение параметров.
Read-only. Площадь, объём, периметр, отметки уровня считает сам Revit. Запись в них падает с ошибкой, и хорошо, если падает громко. Хуже, когда скрипт ловит исключение и молча идёт дальше: половина строк записалась, половина нет, а сообщения об этом нет.
Синхронизация. Если файл в общей работе, все правки уходят в вашу локальную копию. Не синхронизировали до перезаписи - готовьтесь разбирать конфликты вручную.
Чек-лист перед обратной загрузкой
Список короткий, но каждый пункт написан после того, как что-то пошло не так.
- Копия файла сделана и лежит рядом. Не «есть бэкап где-то на сервере», а копия за минуту до загрузки.
- Модель синхронизирована, чужих незакрытых правок в ней нет.
- Столбец с ElementId цел, не отсортирован отдельно от остальных, не содержит пустых ячеек.
- Колонки с артикулами и кодами имеют текстовый формат.
- Загружаются только те колонки, которые правил смежник. Остальные из файла лучше убрать физически.
- Первый прогон делается на выборке из 10 строк. Смотрим глазами в модели, потом пускаем целиком.
На объекте с 1200 элементами инженерных систем этот круг занимает у меня минут двадцать против трёх часов ручного ввода. Единственный раз, когда я пропустил пункт про копию, стоил половины дня на восстановление разделов из архива. Больше не пропускаю.
Чего ждать не надо
Полноценной двусторонней связи между Revit и Excel не существует ни в одном из трёх способов. Это не «связанная таблица», где правка ячейки прилетает в модель. Это ручной обмен: выгрузили, поправили, загрузили. Между этими шагами кто-то может двигать модель, и вы об этом не узнаете.
Не стоит гнать через Excel геометрию. Координаты, отметки, повороты элементов лучше править в модели. Таблица хороша для текстовых и числовых атрибутов: марки, коды, комментарии, наименования, признаки этапности.
И отдельно: не отдавайте боевую выгрузку без служебного столбца. Смежник добавит строку, отсортирует по-своему, удалит колонку с id, и обратная загрузка станет невозможной. Столбец id должен быть первым, заблокированным и подписанным «не трогать».
Три ошибки обмена и что с ними делать
«Warning: Data.ExportExcel operation failed. The RPC server is unavailable.»
Классика Dynamo. Нода не смогла достучаться до Excel через COM. Причины по убыванию частоты: файл, в который пишем, открыт в самом Excel; Excel в момент запуска показывает диалог активации лицензии; на машине стоит только просмотрщик, а не полный офис. Первое лечится закрытием файла, третье не лечится вообще, там нужен Data.ExportCSV.
«The process cannot access the file because it is being used by another process.»
Тот же корень, другая формулировка. Отдельный подвох: файл может держать не Excel, а антивирус или облачный клиент вроде синхронизации с корпоративным диском. Выгружайте в локальную папку, а копируйте на сервер уже готовый файл.
«Warning: Element.SetParameterByName operation failed. The parameter storage type is not a number.»
Обратная загрузка. Excel отдал строку "2100" вместо числа 2100, потому что колонка была текстовой. Между Data.ImportExcel и записью ставьте String.ToNumber, а перед ним List.Clean для отсева пустых ячеек. Проверяется одним взглядом на превью ноды: числа выравниваются иначе, чем строки.
Ещё одна беда без единого сообщения об ошибке: строки съехали на одну. Заголовок таблицы посчитали данными, и все 400 значений записались соседним элементам. Ошибок нет, скрипт доволен, модель испорчена. Поэтому в графе указывают явное смещение (читать с ячейки A2) и всегда проверяют первое и последнее значение вручную.
Какой формат выбирать
| Формат | Когда брать | Чем платишь |
|---|---|---|
| .txt из Revit | разовая отдача смежнику | ручная возня с кодировкой |
| .csv | выгрузки на машине без Excel, автоматизация | теряются типы, разделитель в русской локали |
| .xlsx через Dynamo | нужны несколько листов и форматирование | требуется Excel, медленно на больших объёмах |
| .xlsx через плагин | регулярный обмен с обратной загрузкой | зависимость от чужого инструмента |
Все спецификации разом
Отдельный сценарий, который окупается быстрее прочих. Ноды All Elements of Type с типом ViewSchedule собирают все спецификации проекта, дальше цикл выгружает каждую на свой лист одной книги. Имя листа берётся из имени спецификации, только помните про ограничение Excel: 31 символ и запрет на символы \ / ? * [ ]. Спецификация «Ведомость перемычек (секция 1/2)» уронит граф именно на слэше.
На разделе из 34 спецификаций такая выгрузка идёт четыре минуты. Руками это полтора часа кликов, и обычно к тридцатой вкладке кто-нибудь ошибается с именем.
Короткие ответы на частые вопросы
Можно ли выгрузить спецификацию из связанной модели? Данные читаются, сама спецификация нет. Собираете элементы связи через Document.Elements для нужного экземпляра связи и строите таблицу в Dynamo с нуля.
Почему в Excel числа стали текстом с зелёным уголком? Revit отдал значение вместе с единицами измерения («2100 мм»). Разделяйте значение и единицы ещё в графе, иначе сумма в Excel не посчитается.
Google Таблицы вместо Excel? Работают, но только через .csv и ручную загрузку. Прямой ноды нет, обмен через API гуглов делается python-скриптом и требует ключа сервисного аккаунта. Для одного отдела овчинка обычно не стоит выделки.
Обязательно ли платить за плагин? Нет. Бесплатного SheetLink хватает 90% команд. Платные инструменты берут за пакетную обработку нескольких файлов и за поддержку, а не за саму функцию обмена.
С чего начать
На пробу возьмите одну категорию и три параметра. Выгрузите, поправьте одно значение, загрузите обратно на копии файла. Пройдёте этот круг без потерь - масштабируйте на реальный объём.
Если данных много и они регулярно нужны за пределами Revit, обмен через Excel быстро упирается в потолок. Дальше начинается хранение атрибутов в базе: как это устроено, показано в разборе Revit и PostgreSQL. Промежуточный вариант, когда выгрузки нужны каждому в команде, разобран в статье про Dynamo Player.
Опишите свою выгрузку в Telegram или через форму на странице контактов: скажем честно, хватит ли бесплатного плагина или под вашу логику нужен скрипт. Что делаем на таких задачах, коротко есть в услугах.
Нужен похожий BIM/AI процесс?
Напишите в Telegram или на email — разберём задачу и предложим архитектуру решения.
Telegram Оставить заявку