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

Revit 프로젝트 후반부에는 도면 시트를 대량으로 만들고, 요소마다 파라미터를 채워 넣는 단순 반복 작업이 몰린다. 시트 200장을 손으로 만들고 제목블록에 번호·이름을 하나씩 입력하는 데 며칠이 걸리기도 한다. Dynamo는 이 과정을 그래프 하나로 자동화한다. 엑셀에 정리된 시트 목록을 읽어 시트를 한꺼번에 생성하고, 지정한 위치에 뷰를 배치하며, 요소 파라미터를 스프레드시트 값으로 일괄 입력할 수 있다. 이 글은 시트 자동 생성 그래프와 파라미터 일괄 입력의 실제 노드 흐름, 그리고 트랜잭션·되돌리기 같은 실무 주의점을 단계별로 정리한다.
■ 준비: 데이터를 엑셀로 먼저 정리한다
자동화의 출발점은 좋은 데이터다. 시트 번호·시트 이름·배치할 뷰 이름을 열로 정리한 엑셀 파일을 만들어 둔다. 표처럼 첫 행은 머리글, 아래로 실제 데이터를 넣는다.
| A: SheetNumber | B: SheetName | C: ViewName |
|---|---|---|
| A-101 | 1층 평면도 | Level 1 Plan |
| A-102 | 2층 평면도 | 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)를 넣는다.


■ 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를 모르는 팀원도 버튼 하나로 실행할 수 있다. 파라미터 입력이 안 될 때는 대상 파라미터가 인스턴스인지 타입인지, 읽기 전용(예: 계산된 면적)인지를 먼저 확인한다.







