При попытке сохранить спецификацию (schedule) из Autodesk Revit в Excel пользователи часто сталкиваются с проблемой: экспортированные данные теряют форматирование, разбиваются на отдельные ячейки или содержат лишние символы. Это происходит из-за несовместимости форматов .rvt и .xlsx, а также особенностей работы плагинов Revit для экспорта. Например, спецификация с вложенными параметрами (например, «Марка» → «Тип» → «Объем») в Excel может превратиться в хаотичный набор столбцов, если не настроить правильные параметры выгрузки.
В 80% случаев проблема решается выбором корректного метода экспорта — их пять: стандартный «Экспорт в таблицу», через Dynamo, с использованием Revit API, плагинами (DiRoots Export, Ideate BIMLink) или ручным копированием с предварительной подготовкой данных. Каждый способ имеет ограничения: например, стандартный экспорт не сохраняет формулы и условное форматирование, а Dynamo требует знания визуального программирования. Далее разберём все варианты с пошаговыми инструкциями, типичными ошибками и способами их обхода.
1. Стандартный экспорт спецификации через Revit
Самый простой способ — использовать встроенную функцию «Экспорт в таблицу» (Export → Reports → Schedule). Он подходит для базовых спецификаций без сложных параметров, но имеет критические ограничения:
- 📊 Не сохраняет цветовое форматирование ячеек (например, красный цвет для дефицитных материалов).
- 🔢 Разбивает многострочные ячейки (например,
«Примечания») на несколько строк в Excel. - 🔗 Не экспортирует гиперссылки на элементы модели.
- 📈 Игнорирует группировку данных (например, сведённые по этажам материалы).
Чтобы минимизировать потери данных:
- Откройте спецификацию в Revit и нажмите
Файл → Экспорт → Отчёты → Таблица спецификаций. - В окне экспорта выберите формат
Текстовый файл (TXT)— он лучше сохраняет структуру, чемCSV. - Установите флажок
«Включить заголовки»и«Разделитель табуляции». - После экспорта откройте файл в Excel через
Данные → Из текста, выбрав разделитель«Табуляция».
⚠️ Внимание: Если спецификация содержит формулы (например, подсчёт объёмов), экспортируйте её вTXT, а затем в Excel вручную восстановите формулы через=СУММ()или=ВПР(). Стандартный экспорт преобразует формулы в статические значения.
2. Экспорт через Dynamo: автоматизация для сложных спецификаций
Dynamo — визуальный инструмент программирования для Revit, который позволяет гибко настраивать экспорт данных. Этот метод подходит для спецификаций с:
- 🔄 Вложенными параметрами (например,
«Этаж → Комната → Мебель»). - 📌 Условным форматированием (цвета, шрифты).
- 🔗 Гиперссылками на элементы модели.
- 📊 Динамическими формулами (например, автоматический пересчёт стоимости).
Алгоритм действий:
- Откройте Dynamo в Revit (
Управление → Dynamo). - Создайте новый скрипт и добавьте узлы:
// Пример скрипта для экспорта спецификации в Excel
1. Select Model Element → выберите спецификацию.
2. Element.Parameters → извлеките параметры.
3. List.Create → сформируйте список данных.
4. Excel.WriteToFile → укажите путь к файлу
.xlsx. - Для сохранения форматирования используйте узел Excel.FormatCell (требует пакета
DynamoExcel).
| Проблема | Причина | Решение |
|---|---|---|
| Данные экспортируются в одну колонку | Неверный разделитель в узле List.Transpose | Добавьте узел List.Transpose перед записью в Excel |
| Русские символы отображаются как «???» | Кодировка файла по умолчанию — ASCII | В узле Excel.WriteToFile укажите параметр encoding: "UTF-8" |
| Формулы не работают | Dynamo экспортирует значения, а не формулы | Восстановите формулы вручную или используйте пакет Bumblebee для динамического экспорта |
Как установить пакет DynamoExcel
Откройте Dynamo → Пакеты → Поиск пакетов → введите DynamoExcel → нажмите Установить. После перезапустите Revit.
3. Плагины для Revit: DiRoots Export и Ideate BIMLink
Если стандартный экспорт и Dynamo не подходят, используйте специализированные плагины. Они платные, но предлагают расширенные функции:
- 📤 DiRoots Export:
- Сохраняет группировку данных и иерархию.
- Поддерживает многостраничные спецификации.
- Экспортирует в
Excel,PDF,Word.
- 🔄 Ideate BIMLink:
- Работает с BIM-данными (например, параметры семейств).
- Позволяет редактировать данные в Excel и импортировать обратно в Revit.
- Сохраняет связи между элементами (например, двери и стены).
Инструкция для DiRoots Export:
- Установите плагин через Autodesk App Store.
- Откройте спецификацию в Revit и нажмите
Дополнительно → DiRoots Export. - Выберите формат
Excel (.xlsx)и настройте параметры:- Включите
«Сохранить форматирование».- Укажите
«Разделитель страниц»для многостраничных спецификаций.- Отметьте
«Экспортировать гиперссылки». - Нажмите
«Экспорт»и сохраните файл.
⚠️ Внимание: Плагины могут конфликтовать с другими надстройками Revit. Перед установкой создайте резервную копию проекта (Файл → Сохранить как → Архив).
4. Ручной экспорт: копирование через буфер обмена
Если спецификация небольшая (до 500 строк), её можно скопировать вручную:
- Выделите все данные в спецификации (
Ctrl+A). - Скопируйте в буфер (
Ctrl+C). - Вставьте в Excel (
Ctrl+V) и выберите«Сохранить исходное форматирование». - Если данные встали в одну колонку, используйте
Данные → Текст по столбцамс разделителем«Табуляция».
Преимущества метода:
- ⚡ Быстрота (подходит для срочных задач).
- 🎨 Сохраняет визуальное форматирование (цвета, шрифты).
Недостатки:
- 🚫 Не подходит для спецификаций > 1000 строк (Excel может зависнуть).
- 🔗 Не сохраняет гиперссылки и формулы.
Выделите только необходимые столбцы (скройте лишние через Параметры спецификации).
Убедитесь, что в данных нет объединённых ячеек (разбейте их через Редактировать спецификацию).
Проверьте кодировку: если в Revit используются специальные символы (например, «±»), экспортируйте в UTF-8.-->
5. Экспорт через Revit API: для разработчиков
Если вам нужна полная автоматизация с сохранением всех параметров, используйте Revit API на C# или Python. Этот метод требует навыков программирования, но даёт максимальный контроль над данными.
Пример кода на C# для экспорта спецификации в Excel:
using Autodesk.Revit.DB;
using Excel = Microsoft.Office.Interop.Excel;
// 1. Получите доступ к спецификации
ScheduleSheetInstance schedule = doc.GetElement(new ElementId(12345)) as ScheduleSheetInstance;
ScheduleDefinition def = schedule.Definition;
// 2. Извлеките данные
IList<ElementId> elementIds = schedule.GetOrderedElementIds();
string[,] data = new string[elementIds.Count + 1, def.GetFieldCount()];
// 3. Заполните массив данными (пример для одного параметра)
for (int i = 0; i < elementIds.Count; i++)
{
Element e = doc.GetElement(elementIds[i]);
data[i, 0] = e.LookupParameter("Марка").AsString();
}
// 4. Экспортируйте в Excel
Excel.Application excelApp = new Excel.Application();
Excel.Workbook workbook = excelApp.Workbooks.Add();
Excel.Worksheet worksheet = workbook.Sheets[1];
// Запишите данные в ячейки
for (int i = 0; i < data.GetLength(0); i++)
{
for (int j = 0; j < data.GetLength(1); j++)
{
worksheet.Cells[i + 1, j + 1] = data[i, j];
}
}
workbook.SaveAs(@"C:\Export\Specification.xlsx");
excelApp.Quit();
Для упрощения используйте библиотеки:
- 📖 RevitAPIUI — для работы с интерфейсом Revit.
- 📊 EPPlus — для управления Excel-файлами без установленного Microsoft Office.
⚠️ Внимание: При работе с Revit API всегда тестируйте код на копии проекта. Ошибки в скрипте могут привести к повреждению файла .rvt.
6. Типичные ошибки и их решения
Даже при правильном экспорте могут возникнуть проблемы. Рассмотрим самые частые:
| Ошибка | Причина | Решение |
|---|---|---|
В Excel отображаются символы #Н/Д | Пустые ячейки в Revit интерпретируются как ошибки | Замените пустые значения на 0 или "-" через Найти и заменить в Excel |
Данные в одной ячейке (например, «Марка;Тип;Объем») | Неверный разделитель при экспорте | Используйте Текст по столбцам в Excel с разделителем «Точка с запятой» |
| Потеряны русские символы | Экспорт в кодировке ANSI вместо UTF-8 | Сохраните файл в UTF-8 через Блокнот++ перед открытием в Excel |
| Формулы не обновляются | Excel воспринимает их как текст | Выделите ячейки с формулами → Правка → Заменить (замените '= на =) |
Если проблема не решена:
- Проверьте версию Revit и Excel — в Revit 2023 и Excel 365 могут быть конфликты из-за обновлений.
- Обновите плагины (DiRoots, Ideate) до последней версии.
- Экспортируйте данные в
CSV, а затем импортируйте в Google Sheets — иногда он корректнее обрабатывает разделители.
FAQ: Частые вопросы по экспорту спецификаций
Можно ли экспортировать спецификацию с сохранением формул?
Стандартный экспорт Revit преобразует формулы в статические значения. Чтобы сохранить формулы:
- Используйте Dynamo с пакетом
Bumblebee. - Экспортируйте данные в
TXT, а затем вручную восстановите формулы в Excel.
Почему в Excel вместо кириллицы отображаются знаки вопроса?
Это проблема кодировки. Решения:
- Сохраните экспортированный
TXT-файл в кодировкеUTF-8. - При открытии в Excel выберите кодировку
«Юникод (UTF-8)». - Если используете Dynamo, добавьте в скрипт параметр
encoding: "UTF-8".
Как экспортировать спецификацию с гиперссылками на элементы модели?
Стандартный экспорт не сохраняет гиперссылки. Варианты:
- Используйте плагин DiRoots Export с опцией
«Экспортировать гиперссылки». - В Dynamo извлеките
Element.Idи сгенерируйте ссылки вручную через формулу=ГИПЕРССЫЛКА().
Можно ли экспортировать спецификацию с сохранением цветового форматирования?
Да, но не стандартными средствами. Способы:
- Используйте Dynamo с пакетом
DynamoExcelи узлом Excel.FormatCell. - Экспортируйте в
PDFчерез DiRoots, а затем конвертируйте в Excel с сохранением стилей.
Обратите внимание: Excel не поддерживает градиентную заливку из Revit.
Как автоматизировать экспорт спецификаций для еженедельных отчётов?
Для регулярного экспорта:
- Напишите скрипт на Revit API (например, на
Pythonс библиотекойpyRevit). - Используйте Dynamo Player для запуска сохранённых скриптов без открытия интерфейса.
- Настройте планировщик задач Windows для автоматического запуска скрипта по расписанию.
Пример команды для Python:
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
Подключитесь к открытому документу Revit
doc = __revit__.ActiveUIDocument.Document
Экспортируйте спецификацию (пример)
... (ваш код)
Сохраните в Excel
import pandas as pd
df = pd.DataFrame(data)
df.to_excel("C:/Reports/Weekly_Spec.xlsx", index=False)