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 노드를 사용하는 것이다.

  1. Revit 요소 선택 (예: 모든 창호)
  2. 각 요소의 파라미터 읽기 (예: 너비, 높이, 재질, 화재 등급)
  3. 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로 가져오기

  1. Data.ImportExcel 노드로 Excel 데이터 읽기
  2. 데이터를 Revit 요소 ID와 매핑
  3. 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에 가져올 때 가장 중요한 것은 어느 요소에 이 데이터를 적용할지 식별하는 것이다. 두 가지 방법이 있다:
  1. ElementId 사용: Revit의 고유 ID (가장 정확하지만 Excel에서 관리 어려움)
  2. Mark(식별번호) 파라미터 사용: Revit의 Mark 파라미터를 활용 (실무에서 가장 추천) Mark 파라미터를 활용하면 Excel에서 관리하기 쉽고, Revit 모델이 변경되어도 매핑이 유지된다.

실전 연동 시나리오

시나리오 1: 물량 산출 자동화

  1. Revit에서 벽·바닥·지붕의 수량 데이터를 Excel로 Export
  2. Excel에서 단가를 붙여서 내역서 작성
  3. 업데이트된 내역서를 다시 Revit에 반영 (단가 정보를 모델에 저장)

시나리오 2: 창호 및 마감재 데이터 연동

  1. Excel에서 창호 스케줄(사이즈, 재질, 제조사) 작성
  2. Revit의 창호 패밀리에 Mark 파라미터 설정
  3. 스크립트로 Excel 데이터를 읽어서 Revit 모델 업데이트
  4. 업데이트된 모델로 창호 일람표 자동 생성

시나리오 3: 공정 정보 연동 (4D)

  1. Excel에서 공정표(층별·부재별 시공 일정) 작성
  2. Revit 모델의 각 요소에 공정 정보 Import
  3. 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을 다룬다.