업데이트 2026년 10월 15일읽는 시간 약 6분

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을 누르는 편이 사고를 줄인다.
■ 엑셀 목록을 도면 목록의 원본으로
시트 자동 생성의 이득은 속도보다 일관성이다. 사람이 수백 장을 입력하면 번호 체계가 중간에 흔들리지만, 엑셀 한 곳에서 관리하면 명명 규칙이 끝까지 유지된다. 엑셀이 도면 목록(Drawing List)의 원본이 되므로 시트를 추가·수정할 때도 표만 고치고 그래프를 다시 돌리면 된다.
- Data.ImportExcel이 엑셀 설치·Interop 문제로 실패하면 CSV를 읽는 노드나 Bumblebee·archi-lab 패키지의 대체 노드로 우회한다.
- 입력(엑셀 경로·시트 이름·제목블록)만 노출한 그래프를 Dynamo Player에 등록하면 Dynamo를 모르는 팀원도 실행할 수 있다.
- 파라미터 값이 들어가지 않으면 대상이 인스턴스인지 타입인지, 계산 면적처럼 읽기 전용인지부터 확인한다.
참고 문헌
자주 묻는 질문
Dynamo로 Revit 시트를 한꺼번에 만들 수 있나요?
만들 수 있습니다. 엑셀에 시트 번호·시트 이름·배치할 뷰 이름을 정리해 Data.ImportExcel로 읽은 뒤 Sheet.ByNameNumberTitleBlockAndView 노드에 제목블록과 함께 연결하면 시트가 한꺼번에 생성됩니다.
엑셀 값을 Revit 파라미터에 일괄 입력하려면 어떤 노드를 쓰나요?
Element.SetParameterValueByName 노드를 씁니다. 대상 요소 리스트, 파라미터 이름, 넣을 값 리스트를 입력받으며, 요소와 값의 순서·개수가 정확히 대응해야 엉뚱한 요소에 값이 들어가지 않습니다.
Dynamo 그래프를 실행하기 전에 무엇을 준비해야 하나요?
먼저 모델을 별도로 저장해 백업합니다. 그래프 실행 결과는 Revit의 Undo로 한 번에 못 되돌릴 수 있기 때문입니다. 엑셀 3~5행만 남겨 먼저 돌려 결과를 확인한 뒤 전체로 확장하는 것이 안전합니다.
파라미터 값이 들어가지 않을 때는 무엇을 확인해야 하나요?
파라미터 이름과 대상의 성격부터 확인합니다. 이름은 철자·대소문자·언어(한/영)까지 모델과 정확히 일치해야 하고, 대상이 인스턴스인지 타입인지, 계산 면적처럼 읽기 전용인지도 살펴봐야 합니다.







