08.14(금)
  • 서울  23℃
  • 인천  21℃
  • 대전  24℃
  • 광주  23℃
  • 대구  23℃
  • 울산  26℃
  • 부산  24℃
  • 제주  23℃

PROGRAMMING

Dynamo로 Revit 반복작업 자동화하기: 시트 생성과 파라미터 일괄 입력 활용
2026-07-26 22:56:42  |  아키포털 

Dynamo로 일괄 생성한 다수의 Revit 시트 배치 화면

Revit 프로젝트 후반부에는 도면 시트를 대량으로 만들고, 요소마다 파라미터를 채워 넣는 단순 반복 작업이 몰린다. 시트 200장을 손으로 만들고 제목블록에 번호·이름을 하나씩 입력하는 데 며칠이 걸리기도 한다. Dynamo는 이 과정을 그래프 하나로 자동화한다. 엑셀에 정리된 시트 목록을 읽어 시트를 한꺼번에 생성하고, 지정한 위치에 뷰를 배치하며, 요소 파라미터를 스프레드시트 값으로 일괄 입력할 수 있다. 이 글은 시트 자동 생성 그래프와 파라미터 일괄 입력의 실제 노드 흐름, 그리고 트랜잭션·되돌리기 같은 실무 주의점을 단계별로 정리한다.

■ 준비: 데이터를 엑셀로 먼저 정리한다

자동화의 출발점은 좋은 데이터다. 시트 번호·시트 이름·배치할 뷰 이름을 열로 정리한 엑셀 파일을 만들어 둔다. 표처럼 첫 행은 머리글, 아래로 실제 데이터를 넣는다.

A: SheetNumberB: SheetNameC: ViewName
A-1011층 평면도Level 1 Plan
A-1022층 평면도Level 2 Plan
A-201남측 입면도South Elevation

이 표가 곧 그래프의 입력이 된다. 시트 300장이라면 이 엑셀만 300행으로 늘리면 되고, 그래프는 그대로 재사용된다.

■ 1단계: 엑셀 읽기 (Data.ImportExcel)

<File Path> 노드로 엑셀 파일을 지정하고, <File.FromPath>를 거쳐 <Data.ImportExcel> 노드에 연결한다. Data.ImportExcel은 한 번에 시트 한 장을 읽어 행·열의 2차원 리스트로 돌려준다. 입력은 파일과 시트 이름(sheetName, 문자열)이다. 반환된 리스트에서 <List.GetItemAtIndex>나 Code Block의 인덱싱으로 필요한 열만 뽑는다.

// Code Block 노드 — Data.ImportExcel 결과(data)에서 열 분리
// data = [[ "A-101","1층 평면도","Level 1 Plan" ], ... ]  (머리글 제외)
sheetNumbers = List.Transpose(data)[0];   // A열 전체
sheetNames   = List.Transpose(data)[1];   // B열 전체
viewNames    = List.Transpose(data)[2];   // C열 전체

List.Transpose는 행·열을 뒤집어 "열 단위"로 값을 모으는 노드다. 엑셀에서 세로 열을 그대로 뽑고 싶을 때 자주 쓴다.

■ 2단계: 시트 일괄 생성 (Sheet.ByNameNumberTitleBlockAndView)

제목블록 패밀리 타입을 <Family Types> 노드로 고른 뒤, <Sheet.ByNameNumberTitleBlockAndView> 노드에 시트 이름 리스트, 시트 번호 리스트, 제목블록, 배치할 뷰를 연결하면 시트가 한꺼번에 만들어진다. 이때 리스트 길이가 같아야 1:1로 짝지어지므로 레이싱은 기본 Shortest로 두되, 개수를 반드시 맞춘다.

[File Path]→[Data.ImportExcel]→ data
     data →(Code Block: 열 분리)→ sheetNumbers / sheetNames / viewNames
[Family Types: A1 제목블록] ─┐
sheetNames  ────────────────┤
sheetNumbers ───────────────┼─▶ [Sheet.ByNameNumberTitleBlockAndView] → 새 시트들
[Views: viewNames로 뷰 조회]─┘

뷰는 <Views> 계열 노드나 archi-lab·Clockwork 패키지의 뷰 조회 노드로 이름을 매칭해 가져온다. 배치 위치를 세밀하게 지정하려면 <Viewport.Create> 계열 노드에 시트와 뷰, 좌표(Point)를 넣는다.

엑셀 데이터가 3D 모델의 파라미터로 연결되는 데이터 흐름

Dynamo Player로 시트 자동 생성 스크립트를 실행하는 모습

■ 3단계: 파라미터 일괄 입력 (엑셀 → 모델)

파라미터 일괄 입력의 핵심 노드는 <Element.SetParameterValueByName>이다. 대상 요소 리스트, 파라미터 이름(문자열), 넣을 값 리스트 세 가지를 입력받는다. 예를 들어 모든 방의 "부서" 파라미터를 엑셀 값으로 채우는 흐름은 아래와 같다.

[Categories: Rooms]→[All Elements of Category]→ rooms
[Data.ImportExcel]→(열 분리)→ deptValues   // 엑셀 '부서' 열

[Element.SetParameterValueByName]
    element        = rooms
    parameterName  = "부서"
    value          = deptValues

rooms와 deptValues의 순서·개수가 정확히 대응해야 엉뚱한 방에 값이 들어가지 않는다. 실무에서는 방 고유번호(예: "Number")를 키로 삼아 엑셀 행과 모델 요소를 매칭한 뒤 값을 넣는 것이 안전하다. 이름 짝짓기가 어긋나면 <List.SortByKey>로 양쪽을 같은 기준으로 정렬해 맞춘다.

■ 실행 순서와 주의점

단계확인할 것
① 백업실행 전 모델을 별도 저장. Dynamo가 만든 변경은 하나의 트랜잭션으로 커밋된다
② 소규모 검증엑셀 3~5행만 남겨 먼저 돌려 결과 확인 후 전체로 확장
③ 파라미터 이름철자·대소문자·언어(한/영)까지 모델과 정확히 일치해야 값이 들어간다
④ 되돌리기그래프 실행 결과는 Revit의 Undo로 한 번에 못 되돌릴 수 있으므로 백업이 안전판

특히 Dynamo의 요소 생성·수정은 Revit 트랜잭션 안에서 일어난다. 그래프를 자동 실행(Automatic) 모드로 켜 두면 값을 바꿀 때마다 모델이 즉시 변경되므로, 대량 작업 그래프는 수동(Manual) 모드로 두고 검토 후 Run을 누르는 편이 사고를 줄인다.

■ 눈여겨볼 것

시트 자동 생성의 진짜 이득은 속도보다 일관성이다. 사람이 300장을 입력하면 번호 체계가 중간에 흔들리고 오타가 섞이지만, 엑셀 한 곳에서 관리하면 명명 규칙이 끝까지 유지된다. 엑셀이 곧 도면 목록(Drawing List)이자 원본이 되어, 나중에 시트를 추가·수정할 때도 표만 고치고 다시 돌리면 된다. 다만 Data.ImportExcel은 환경에 따라 엑셀 설치·Interop 의존성 문제로 실패할 수 있는데, 이때는 CSV를 읽는 노드나 Bumblebee·archi-lab 같은 패키지의 대체 노드를 쓰면 우회된다.

■ 이런 분께 도움이 됩니다

  • 도면 마감에 쫓기는 실무자 — 시트 생성·번호 입력을 그래프 한 번으로 끝낼 수 있다
  • BIM 코디네이터 — 도면 목록을 엑셀로 중앙 관리해 명명 규칙을 표준화할 수 있다
  • 대규모 프로젝트 팀 — 수백 장 규모의 시트·파라미터 작업에서 오류와 시간을 함께 줄인다

■ 참고

잘 만든 그래프는 저장해 다른 프로젝트에서도 재사용할 수 있다. 입력(엑셀 경로·시트 이름·제목블록)만 노출한 그래프는 Dynamo Player로 옮겨 두면, Dynamo를 모르는 팀원도 버튼 하나로 실행할 수 있다. 파라미터 입력이 안 될 때는 대상 파라미터가 인스턴스인지 타입인지, 읽기 전용(예: 계산된 면적)인지를 먼저 확인한다.

댓글  0개

등록