AI 해결 노트 · 2026-09-18 · 실측 2026-09-18
틀 고정은 인쇄에 따라오지 않습니다 — 화면용 틀 고정과 인쇄용 「인쇄 제목」
한 줄로
머리글 1행과 자료 60행으로 된 표에 틀 고정을 걸어 놓고 그대로 PDF로 저장했더니, 2쪽에는 열 이름이 한 개도 없었습니다. 틀 고정을 켠 PDF와 끈 PDF에서 뽑은 글자가 완전히 같았습니다 — 틀 고정은 화면에만 듣습니다. 종이·PDF에서 머리글을 반복시키는 값은 PageSetup.PrintTitleRows 고, 이걸 $1:$1 로 넣으니 2쪽에서 뽑은 글자가 사번 · 성명 · 부서 로 시작했습니다. 화면에서 같은 자리는 「페이지 설정」 창 [시트] 탭의 인쇄 제목 → 반복할 행(R) 칸입니다.
이런 분께
- 표가 길어서 스크롤하면 열 이름이 사라져 몇 번째 열이 무엇인지 헷갈리는 분
- 화면에서는 머리글이 잘 붙어 있는데 출력하거나 PDF로 넘기면 2쪽부터 숫자만 늘어서 받는 사람이 되묻는 분
- 「틀 고정을 했는데 왜 인쇄가 안 되냐」는 말을 들어 본 분
실측 환경
| 항목 | 값 |
|---|---|
| OS | Microsoft Windows 11 Home 10.0.26200 (build 26200) |
| 셸 | PowerShell 7.6.6 |
| 엑셀 | Excel 16.0, build 20326, 언어 코드 1042 |
| 기본 프린터 | Ne00:에 있는 Microsoft Print to PDF |
| 시험 파일 | 직접 만든 더미 교육이수표 — 14열 × 61행(머리글 1행 + 자료 60행), UsedRange $A$1:$N$61 |
| 열 구성 | 사번·성명·부서·1월~10월·비고 |
| PDF 저장 | Excel COM Worksheet.ExportAsFixedFormat(0, 경로) |
| PDF 읽기 | Python 3.12.10 + PyMuPDF 1.28.0 |
| 표 만들기 | openpyxl 3.1.5 |
사번은 A1001~A1060, 성명은 성 한 글자와 이름 두 글자를 무작위로 붙여 만든 값(홍사랑·장나은·오시우 등), 부서는 생산관리·품질관리·영업1팀 같은 지어낸 이름입니다. 시험 대상으로 연 파일은 이 더미 하나뿐입니다.
화면에서 무엇이 어떻게 고정되는가
먼저 틀 고정이 무엇을 하는지부터 봤습니다. 25행·D열까지 스크롤한 같은 자리를, 틀 고정을 끈 채와 켠 채로 각각 찍었습니다.
$w = $xl.ActiveWindow
$w.FreezePanes = $false
$w.ScrollRow = 25; $w.ScrollColumn = 4이때 화면 왼쪽 위 셀은 $D$25 였습니다. 1행이 밀려 올라가고 A·B·C열이 왼쪽으로 빠져나가, 숫자만 보입니다.

이번에는 B2 셀에 커서를 두고 틀 고정을 켠 뒤 같은 자리로 스크롤했습니다.

맨 윗줄에 1행(사번 · 1월 · 2월 …)이 남고, 왼쪽에 A열의 사번 A1024~A1048 이 남았습니다. 행 머리가 1 다음에 바로 25로 건너뜁니다. 커서를 어디에 두고 켜느냐로 무엇이 고정되는지가 갈립니다.
| 커서 자리 | FreezePanes | SplitRow | SplitColumn | 화면에서 남는 것 |
|---|---|---|---|---|
| 연 직후(아무것도 안 함) | False | 0 | 0 | 없음 |
| A2 | True | 1 | 0 | 첫 행 |
| B1 | True | 0 | 1 | 첫 열 |
| B2 | True | 1 | 1 | 첫 행 + 첫 열 |
SplitRow·SplitColumn 에 들어간 1과 0은 커서 위쪽의 행 수, 왼쪽의 열 수와 맞아떨어집니다. 커서를 C4 같은 자리에 두는 조합은 시험하지 않았습니다.
리본에서 같은 자리는 보기 탭 → 창 그룹의 「틀 고정」 단추입니다. 이 탭의 그룹 이름은 왼쪽부터 통합 문서 보기 / 표시 / 확대·축소 / 창 / 매크로 였고, 창 그룹 안에 새 창·모두 정렬·틀 고정·나누기·숨기기·숨기기 취소가 늘어서 있었습니다. 이 배치는 원자료 폴더의 참고_보기탭_틀고정.png 에서 읽은 것입니다. 단추를 눌렀을 때 펼쳐지는 목록은 얻지 못했습니다.
그대로 PDF로 저장하면
틀 고정을 켠 채(FreezePanes=True, SplitRow=1, SplitColumn=1) 저장했습니다.
$ws.Range("B2").Select()
$xl.ActiveWindow.FreezePanes = $true
$ws.ExportAsFixedFormat(0, "$T\KO2_53_a_틀고정만.pdf")나온 PDF는 세로 A4(595×842pt) 4쪽이었습니다. 쪽마다 열 이름 14개 중 몇 개가 들어 있는지 세 봤습니다.
| 쪽 | 들어 있는 열 이름 | 그 쪽에 실린 사번 |
|---|---|---|
| 1쪽 | 9개 (사번~6월) | A1001 ~ A1040 |
| 2쪽 | 0개 | A1041 ~ A1060 |
| 3쪽 | 5개 (7월~비고) | — |
| 4쪽 | 0개 | — |
2쪽에서 뽑은 글자는 A1041 · 오시우 · 품질관리 · 4 · 0 · 6 순서로, 열 이름 없이 자료부터 시작했습니다.

틀 고정이 인쇄에 아무 영향도 주지 않는다는 확인
「저장할 때 뭔가 어긋난 것 아니냐」를 지우려고, 같은 파일을 틀 고정만 껐다 켜서 두 번 저장하고 맞춰 봤습니다.
d 고정끔 : 121599 bytes
e 고정켬 : 121599 bytes
쪽수 4 / 4, 1쪽 크기 595x842pt / 595x842pt
추출 텍스트 글자수 2129 / 2129, 텍스트 SHA256 d2c8bf7d241ce314 / d2c8bf7d241ce314비교한 쪽수·쪽 크기·뽑아낸 글자가 모두 같았습니다. PDF 파일 자체의 SHA256은 달랐는데, 그 원인은 확인하지 못했습니다.
인쇄용 설정은 따로 있습니다
종이와 PDF에서 머리글을 반복시키는 값은 PageSetup.PrintTitleRows 입니다. 파일을 연 직후에는 PrintTitleRows 와 PrintTitleColumns 모두 빈 문자열이었습니다.
$ws.PageSetup.PrintTitleRows = '$1:$1'
$ws.ExportAsFixedFormat(0, "$T\KO2_53_b_인쇄제목.pdf")이 한 줄만 넣고 다시 저장하니 2쪽이 이렇게 바뀌었습니다.

| 쪽 | 인쇄 제목 없음 | PrintTitleRows='$1:$1' |
|---|---|---|
| 1쪽 | 열 이름 9개 | 열 이름 9개 |
| 2쪽 | 0개 | 9개 (사번~6월) |
| 3쪽 | 5개 (7월~비고) | 5개 |
| 4쪽 | 0개 | 5개 (7월~비고) |
값을 다시 빈 문자열로 지우고 저장하니 파일 크기가 처음과 같은 121,599바이트로 돌아왔고 2쪽의 머리글도 도로 사라졌습니다. 켰다 껐다가 그대로 되는 설정입니다.
화면에서 하는 법 (Excel 16.0 한국어)
페이지 레이아웃 탭 → 페이지 설정 그룹 → 「인쇄 제목」 단추입니다. 이 그룹에는 여백·용지 방향·크기·인쇄 영역·나누기·배경·인쇄 제목이 있었습니다. 저희는 리본에 Alt+P 에 이어 i 를 보냈고, 그러자 앞에 나온 창의 제목이 「페이지 설정」으로 바뀌었습니다. 그 창을 찍은 것이 아래 그림입니다.
![페이지 설정 창 [시트] 탭 — 인쇄 제목의 반복할 행(R)·반복할 열(C)](/notes/excel-freeze-and-print-titles/05.png)
창 위쪽에 [페이지] [여백] [머리글/바닥글] [시트] 네 탭이 있고 [시트] 탭이 열린 채로 떴습니다. 칸 차례는 이렇습니다.
- 인쇄 영역(A)
- 인쇄 제목 — 반복할 행(R) / 반복할 열(C)
- 인쇄 — 눈금선(G)·흑백으로(B)·간단하게 인쇄(Q)·행/열 머리글(R)
- 페이지 순서 — 행 우선(D) / 열 우선(V)
위에서 넣은 $1:$1 이 들어가는 칸이 반복할 행(R) 입니다. 캡처한 화면에서는 인쇄 영역·반복할 행·반복할 열 세 칸이 모두 비어 있었습니다. 이 칸에 마우스로 직접 입력해 COM 결과와 같은지 맞춰 보지는 않았습니다.
옆으로도 잘리는 표라면
위 표는 14열이라 3·4쪽이 「7월~비고」만 담은 오른쪽 조각이었습니다. 이 쪽들에는 사번도 성명도 없어서, 어느 사람의 값인지 알 수 없습니다. 열 쪽을 반복시키는 값은 PrintTitleColumns 입니다.
$ws.PageSetup.PrintTitleRows = '$1:$1'
$ws.PageSetup.PrintTitleColumns = '$A:$C'둘 다 넣고 저장하니 3쪽에서 뽑은 글자가 사번 · 성명 · 부서 · A1001 · 홍사랑 · 생산관리 순서로 시작했습니다. 쪽수는 4쪽 그대로였고 파일은 133,364바이트로 커졌습니다. 화면에서는 같은 창의 반복할 열(C) 칸입니다.
파일에 남는가
틀 고정과 인쇄 제목을 모두 켠 상태로 .xlsx 로 저장하고 다시 열어 봤습니다.
다시 연 파일 : FreezePanes=True SplitRow=1 SplitColumn=1
다시 연 파일 : PrintTitleRows='$1:$1'둘 다 파일에 남습니다. 한 번 잡아 두면 다음에 열 때도 그대로라는 뜻이고, 반대로 남이 만든 파일을 받았을 때 왜 머리글이 붙어 나오는지도 이걸로 설명됩니다.
결과
| 하고 싶은 일 | 어디서 | 속성값 |
|---|---|---|
| 화면에서 스크롤해도 머리글 보기 | 보기 → 창 → 틀 고정 | ActiveWindow.FreezePanes = True |
| 화면에서 첫 행만 | 커서를 A2에 두고 틀 고정 | SplitRow=1, SplitColumn=0 |
| 화면에서 첫 열만 | 커서를 B1에 두고 틀 고정 | SplitRow=0, SplitColumn=1 |
| 인쇄·PDF에서 쪽마다 머리글 | 페이지 레이아웃 → 인쇄 제목 → 반복할 행 | PageSetup.PrintTitleRows = '$1:$1' |
| 인쇄·PDF에서 쪽마다 왼쪽 열 | 같은 창 → 반복할 열 | PageSetup.PrintTitleColumns = '$A:$C' |
여러 파일을 반복할 때
PrintTitleRows 는 워크시트가 갖는 값입니다. 이번 시험은 한 시트에서만 재 봤고, 시트가 여럿인 통합 문서나 폴더 단위 처리는 돌려 보지 않았습니다. 스크립트로 여러 시트를 돌릴 생각이라면 시트마다 값이 들어갔는지 하나씩 읽어 확인하시는 편이 안전합니다.
작업이 끝나면 $xl.Quit() 뒤에 EXCEL 프로세스가 남았는지 꼭 봐야 합니다. 저희 로그에도 Quit() 직후 PID가 남아 있던 기록이 여러 번 있고, 정리 로그에는 저희가 띄운 PID 27848과 34260을 한 차례에 종료한 기록이 있습니다.
실패한 것
- 화면 캡처를 처음 돌렸을 때 Excel 창이 앞으로 나오지 않아(
[포그라운드] 일치=False) 한 장도 찍지 못하고 끝났습니다. 창을 앞으로 부르는 동작을 여러 번 되풀이하도록 고친 뒤 다시 돌려 찍었습니다. 두 번 돌린 내력은 원자료의08_시행착오.txt에 적었고, 캡처 로그 파일 자체는 성공한 두 번째 실행으로 덮어써졌습니다. - 「틀 고정」 단추를 눌러 펼쳐지는 목록은 키 입력(
fr)으로 열지 못했고, 보기 탭까지만 열린 화면이 남았습니다. 그 그림은 원자료 폴더에만 두었습니다. - 두 PDF의 파일 해시가 다른 이유를 확인하지 못했습니다. 쪽수·쪽 크기·추출 텍스트가 같다는 것까지만 확인한 값입니다.
- 이 글의 쪽수·열 배분은 같은 파일 한 개로 낸 값이고, 다른 날 다시 돌려 같은 값이 나오는지 재시험하지 않았습니다.
확인하지 않은 것
- 리본을 사람이 마우스로 눌러서 설정하는 경로는 재 보지 않았습니다. 「반복할 행」 칸에 직접
$1:$1을 쳐 넣었을 때의 결과도 확인하지 않았습니다. - 실제 프린터로 종이에 뽑아 보지 않았습니다. 이 글의 「인쇄」는 모두 COM 내보내기로 만든 PDF이고, 대조도 쪽수·쪽 크기·추출 텍스트 세 가지로만 했습니다.
- 머리글이 두 줄 이상인 표(
$1:$2)나, 병합된 머리글이 있는 표에서 같은 값이 듣는지 보지 않았습니다. - 인쇄 영역(
PrintArea)을 함께 지정했을 때 인쇄 제목이 어떻게 겹치는지 시험하지 않았습니다. - 엑셀 2016·2019 등 다른 버전에서 탭·그룹·칸 이름이 같은지 확인하지 않았습니다.