Revit데이터관리실무
여전히 Excel로 물량 옮기고 있다면: Revit-Excel 데이터 연동 자동화
MADE IN WORKS·2025. 3. 26.·5분 읽기
개요
BIM 프로젝트에서 Excel은 여전히 가장 보편적인 데이터 교환 도구다. 물량 산출표, 자재 리스트, 창호 일람표, 공정표 — BIM 모델의 데이터를 Excel로 내보내거나, 반대로 Excel에서 정리된 데이터를 Revit 모델에 반영해야 하는 상황은 끝없이 발생한다. Excel-Revit 데이터 연동을 자동화하면, 데이터 입력 시간을 90% 단축하고 오류를 거의 0%로 줄일 수 있다.
Excel 연동의 두 가지 방향
- Export (Revit → Excel): 모델 데이터를 Excel로 추출 → 물량·일람표·리포트
- Import (Excel → Revit): Excel 데이터를 Revit에 반영 → 자재 코드·일정·속성 일괄 업데이트
Revit → Excel: 데이터 내보내기
방법 1: Dynamo로 내보내기
가장 간단한 방법은 Dynamo의 Data.ExportExcel 노드를 사용하는 것이다.
- Revit 요소 선택 (예: 모든 창호)
- 각 요소의 파라미터 읽기 (예: 너비, 높이, 재질, 화재 등급)
Data.ExportExcel노드로 Excel 파일 출력
모든창호선택 → 각 파라미터 읽기 → 리스트로 변환 → Data.ExportExcel (파일경로)
방법 2: Python 스크립트로 내보내기
더 정교한 제어가 필요하다면 Python 스크립트를 사용한다.
"""창호 일람표를 Excel로 내보내기"""
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
import csv
doc = __revit__.ActiveUIDocument.Document
# 모든 창호 수집
windows = FilteredElementCollector(doc)\
.OfCategory(BuiltInCategory.OST_Windows)\
.WhereElementIsNotElementType()\
.ToElements()
# Excel 데이터 준비
data = [['ID', '층', '너비', '높이', '재질', '화재등급', '단열성능']]
for window in windows:
level = doc.GetElement(window.LevelId)
width = window.LookupParameter('너비')
height = window.LookupParameter('높이')
material = window.LookupParameter('프레임_재질')
fire = window.LookupParameter('화재_등급')
insulation = window.LookupParameter('단열_성능')
data.append([
str(window.Id),
level.Name if level else 'N/A',
width.AsValueString() if width else '',
height.AsValueString() if height else '',
material.AsValueString() if material else '',
fire.AsValueString() if fire else '',
insulation.AsValueString() if insulation else ''
])
# CSV로 저장 (Excel에서 바로 열기 가능)
with open('창호일람표.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerows(data)
print(f"창호 {len(windows)}개 데이터를 Excel로 내보냈습니다.")
Excel → Revit: 데이터 가져오기
Excel에서 정리된 자재 코드, 공정 정보, 단가 등을 Revit 모델에 일괄 적용하는 것이 진짜 자동화의 꽃이다.
Dynamo로 가져오기
Data.ImportExcel노드로 Excel 데이터 읽기- 데이터를 Revit 요소 ID와 매핑
Element.SetParameterByName으로 각 요소 업데이트
Python 스크립트로 가져오기
"""Excel 자재 코드를 Revit 모델에 일괄 적용"""
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
import csv
doc = __revit__.ActiveUIDocument.Document
# 1. Excel 파일 읽기
updates = []
with open('자재코드_업데이트.csv', 'r', encoding='utf-8-sig') as f:
reader = csv.DictReader(f)
for row in reader:
updates.append(row)
# 2. Revit 요소 업데이트 (트랜잭션 시작)
t = Transaction(doc, "자재 코드 업데이트")
t.Start()
success = 0
fail = 0
for update in updates:
try:
elem_id = ElementId(int(update['ElementId']))
element = doc.GetElement(elem_id)
if element:
# 자재 코드 파라미터 설정
param = element.LookupParameter('자재_코드')
if param and not param.IsReadOnly:
param.Set(update['자재코드'])
success += 1
else:
fail += 1
except:
fail += 1
t.Commit()
print(f"업데이트 완료: {success}개 성공, {fail}개 실패")
Excel-Revit 데이터 매핑의 핵심 — ID 일치Excel 데이터를 Revit에 가져올 때 가장 중요한 것은 어느 요소에 이 데이터를 적용할지 식별하는 것이다. 두 가지 방법이 있다:
- ElementId 사용: Revit의 고유 ID (가장 정확하지만 Excel에서 관리 어려움)
- Mark(식별번호) 파라미터 사용: Revit의
Mark파라미터를 활용 (실무에서 가장 추천) Mark 파라미터를 활용하면 Excel에서 관리하기 쉽고, Revit 모델이 변경되어도 매핑이 유지된다.
실전 연동 시나리오
시나리오 1: 물량 산출 자동화
- Revit에서 벽·바닥·지붕의 수량 데이터를 Excel로 Export
- Excel에서 단가를 붙여서 내역서 작성
- 업데이트된 내역서를 다시 Revit에 반영 (단가 정보를 모델에 저장)
시나리오 2: 창호 및 마감재 데이터 연동
- Excel에서 창호 스케줄(사이즈, 재질, 제조사) 작성
- Revit의 창호 패밀리에 Mark 파라미터 설정
- 스크립트로 Excel 데이터를 읽어서 Revit 모델 업데이트
- 업데이트된 모델로 창호 일람표 자동 생성
시나리오 3: 공정 정보 연동 (4D)
- Excel에서 공정표(층별·부재별 시공 일정) 작성
- Revit 모델의 각 요소에 공정 정보 Import
- Navisworks나 Dynamo로 4D 시뮬레이션 실행
데이터 연동 팁 — 템플릿 활용Excel과 Revit을 반복해서 연동한다면, Excel 템플릿을 만들어서 컬럼명·데이터 포맷을 고정하라. Python 스크립트에서 이 템플릿을 기준으로 동작하게 설계하면, 새로운 프로젝트에서도 동일한 스크립트를 재사용할 수 있다. 가장 흔한 실수는 "이번에는 데이터 포맷이 조금 달라서 스크립트를 또 수정했다"는 경우다.
오류 처리와 데이터 검증
데이터 연동에서 가장 중요한 것은 오류 없는 데이터 전송이다. 다음 체크리스트를 스크립트에 포함시키자.
- Excel 데이터의 컬럼명이 예상과 일치하는가?
- Revit 요소 ID/마크가 Excel과 1:1로 매핑되는가?
- 쓰기 전에 대상 파라미터가 읽기 전용(ReadOnly)이 아닌가?
- 데이터 타입이 일치하는가? (텍스트 vs 숫자 vs 길이)
- 트랜잭션이 정상적으로 커밋되었는가?
# 데이터 검증 함수 예시
def validate_excel_data(data):
errors = []
required_columns = ['ElementId', '자재코드']
# 1) 필수 컬럼 확인
for col in required_columns:
if col not in data[0]:
errors.append(f"필수 컬럼 누락: {col}")
# 2) 데이터 타입 확인
for row in data:
try:
int(row['ElementId']) # ID가 숫자인지 확인
except:
errors.append(f"잘못된 ElementId: {row['ElementId']}")
return errors
마무리
Excel-Revit 데이터 연동은 BIM 프로젝트에서 가장 자주 필요하면서도 가장 쉽게 자동화할 수 있는 영역 중 하나다. Dynamo로 간단하게 시작해서 Python 스크립트로 발전시켜 나가면, 데이터 입력 작업에서 완전히 해방될 수 있다. 핵심은 ID 매핑 방식을 표준화하고, Excel 템플릿을 고정해서 스크립트를 재사용 가능하게 만드는 것이다.
다음 글에서는 BIM 시각화의 세계로 넘어가서 — 실시간 렌더링 3대장 비교: Twinmotion vs Enscape vs Lumion을 다룬다.