12편: "클릭 한 번에 보고서 완성" Apps Script 실전: 스프레드시트 데이터를 PDF로 자동 변환하여 드라이브에 저장하기

 


매달 혹은 매주 보고서 시즌이 되면 많은 직장인이 단순 노동에 시달립니다. 스프레드시트에 정성스레 취합한 실적 표와 대시보드 영역을 마우스로 낑낑대며 드래그한 뒤, [인쇄] 버튼을 누르고, PDF로 저장하기를 누른 다음, 내 구글 드라이브나 로컬 컴퓨터에 폴더를 찾아 들어가 "2026년_5월_실적보고서.pdf"라고 파일 이름을 수동으로 타이핑하여 저장하곤 합니다.

여기에 보고 대상이 거래처 수십 곳이라면 어떨까요? 거래처별로 시트 필터를 바꿔가며 이 작업을 수십 번 반복하다 보면 손가락 관절이 저려오고 어느새 야근은 확정이 됩니다.

8편의 매크로 기록 기능으로는 이 복잡한 'PDF 구워내기 및 구글 드라이브 자동 저장' 프로세스를 구현할 수 없습니다. 하지만 구글 앱스 스크립트(Apps Script)를 딱 한 번만 제대로 심어두면, 시트 위에 올려둔 'PDF 발행' 버튼을 툭 누르는 순간 시트의 지정 영역이 깔끔한 PDF 보고서로 변환되어 내 드라이브에 날짜별로 척척 누적 저장되는 기적을 만날 수 있습니다. 오늘은 코딩을 몰라도 그대로 복사해 쓸 수 있는 실전 PDF 자동 변환 공식을 전수해 드립니다.


## 1. PDF 자동 변환의 작동 원리 이해하기

구글 앱스 스크립트(GAS)가 스프레드시트 화면을 PDF로 만들어내는 방식은 의외로 간단합니다. 구글 시트는 웹브라우저 기반이기 때문에, 주소창에 특정 매개변수(Parameter)를 던져주면 그 영역을 인쇄용 PDF 포맷으로 출력해 주는 비밀 기능(export?exportFormat=pdf)을 내장하고 있습니다.

우리가 코드로 구현할 프로세스는 다음과 같습니다.

  1. 현재 활성화된 스프레드시트에서 PDF로 구워낼 '특정 범위(예: 대시보드 영역)'를 특정합니다.

  2. 눈금선 숨김, 인쇄 가로 세로 방향, 용지 맞춤 등 인쇄 설정을 코드로 제어합니다.

  3. 이 설정이 반영된 임시 인쇄 주소를 구글 서버에 요청하여 PDF 바이너리 데이터를 받아옵니다.

  4. 받아온 PDF 파일을 구글 드라이브의 지정된 폴더에 자동으로 파일 이름을 지어 저장합니다.


## 2. 3분 실무 실천 가이드: PDF 자동 저장 단추 만들기

실무에서 가장 많이 쓰이는 대시보드 시트를 PDF로 저장하는 완전판 코드를 구현해 보겠습니다.

[1단계] 구글 드라이브에 저장 전용 폴더 만들기

  1. 내 구글 드라이브에 들어가 새 폴더를 만듭니다. (예: PDF_보고서_보관함)

  2. 생성된 폴더를 클릭해 들어간 뒤, 브라우저 주소창의 맨 끝을 확인합니다.

    • https://drive.google.com/drive/folders/이곳에_있는_영어와_숫자가_폴더ID입니다

    • 이 폴더 ID 스트링을 따로 메모장에 복사해 둡니다.


[2단계] Apps Script에 마법 코드 심기

  1. 내 스프레드시트에서 [확장 프로그램] -> [Apps Script]를 클릭합니다.

  2. 기존 코드를 지우고 아래의 실전 구동 코드를 그대로 복사해 붙여넣습니다.

f
unction exportSheetToPDF() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("대시보드"); // PDF로 구울 시트 이름 // [필독] 아래 '폴더_ID_입력' 칸에 1단계에서 복사한 구글 드라이브 폴더 ID를 붙여넣으세요. var folderId = "폴더_ID_입력"; var folder = DriveApp.getFolderById(folderId); // 오늘 날짜를 "YYYY-MM-DD" 포맷으로 추출하여 파일명에 사용합니다. var formattedDate = Utilities.formatDate(new Date(), "GMT+09:00", "yyyy-MM-dd"); var fileName = formattedDate + "_실적보고서.pdf"; // 인쇄용 URL 매개변수 설정 (눈금선 제거, 가로 방향, A4 규격 맞춤 등) var url = ss.getUrl().replace(/edit$/, '') + 'export?'; var exportOptions = { exportFormat: 'pdf', format: 'pdf', size: 'letter', // 용지 크기 (letter 또는 a4) portrait: 'false', // 가로 방향 출력 (세로는 true) fitw: 'true', // 페이지 폭 맞춤 gridlines: 'false', // 눈금선 표시 안 함 printtitle: 'false', sheetnames: 'false', fzr: 'false', gid: sheet.getSheetId() // 특정 시트의 ID만 타겟팅 }; var urlParts = []; for (var key in exportOptions) { urlParts.push(key + '=' + exportOptions[key]); } var exportUrl = url + urlParts.join('&'); // 구글 드라이브 API를 통해 PDF 파일을 생성하고 폴더에 수납합니다. var response = UrlFetchApp.fetch(exportUrl, { headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(), 'MuteHttpExceptions': true } }); var blob = response.getBlob().setName(fileName); folder.createFile(blob); // 시트에 성공 알림창 띄우기 SpreadsheetApp.getUi().alert('🎉 PDF 보고서가 구글 드라이브 폴더에 성공적으로 저장되었습니다!\n파일명: ' + fileName); }
  1. 코드 내부의 "폴더_ID_입력" 부분을 여러분의 실제 폴더 ID로 변경한 뒤 상단 [저장(디스켓 아이콘)] 버튼을 클릭합니다.


[3단계] 대시보드 시트에 버튼 연동하기

  1. 시트로 돌아와서 [삽입] -> [그림] 기능을 이용해 예쁜 "PDF 보고서 발행" 버튼 이미지를 그립니다.

  2. 생성된 버튼 이미지의 우측 상단 점 3개 아이콘을 누르고 스크립트 할당을 선택합니다.

  3. 입력창에 함수명인 exportSheetToPDF를 정확히 입력하고 확인을 누릅니다.

이제 버튼을 누르면 화면에 "PDF 보고서가 성공적으로 저장되었습니다!"라는 안내 팝업이 뜨고, 내 드라이브 지정 폴더를 확인해 보면 오늘 날짜가 깔끔하게 박힌 PDF 파일이 완벽하게 생성되어 들어간 모습을 목격하게 됩니다.


## 3. Apps Script 실전 구동 시 주의사항과 예외 방지

  • 첫 실행 시 보안 권한 승인 필수: 처음 버튼을 클릭하면 구글이 "승인 필요"라는 보안 경고창을 띄웁니다. 여러분이 직접 작성한 안전한 스크립트이므로 안심하시고 [고급] -> [안전하지 않은 페이지로 이동]을 클릭하여 접근 권한을 1회 허용해 주시면 이후로는 경고창 없이 매끄럽게 돌아갑니다.

  • 시트 이름의 일치 여부 확인: 코드의 3번째 줄에 명시된 ss.getSheetByName("대시보드")는 시트의 하단 탭 이름과 정확히 대소문자 및 띄어쓰기까지 일치해야 합니다. 이름이 맞지 않으면 Null 에러가 발생해 코드가 중간에 멈춥니다.

  • 레이아웃 깨짐 방지 팁: PDF 변환 시 열 너비가 애매하면 한두 열이 다음 페이지로 밀려 보기 싫게 인쇄됩니다. 이를 막기 위해 인쇄 대상 시트의 열을 최대한 콤팩트하게 정렬하고, 가급적 표 우측에 불필요한 빈 열들을 삭제해 두는 것이 완벽한 단일 페이지 PDF를 만드는 비결입니다.


[12편 핵심 요약]
  • 구글 앱스 스크립트(GAS)를 활용하면 복잡한 수동 인쇄 과정 없이 단 한 번의 클릭으로 시트 화면을 PDF 파일로 굽는 시스템을 구축할 수 있다.

  • 구글 드라이브 고유의 폴더 ID와 GAS의 UrlFetchApp API를 매핑하여 자동으로 지정 경로에 파일명 날짜를 매겨 아카이빙할 수 있다.

  • 시트에 심은 도형 이미지에 함수명을 연동하여 코딩을 모르는 동료들도 버튼 클릭만으로 즉시 문서를 출력하게 인터페이스를 설계한다.

[다음 편 예고]
  • 다음 13편에서는 이보다 한 단계 더 강력한 자동화 기능으로, 스프레드시트에 작성된 거래처나 고객 명단을 자동으로 훑으며 이름, 만기일, 청구 금액을 개인화하여 지메일(Gmail)로 단체 발송해 주는 "이메일 노가다 끝! 스프레드시트 명단에 맞춰 개인화된 Gmail 자동 단체 발송 시스템 구축" 공식을 다룹니다.



  • 매달 반복되는 거래처 정산서나 실적 보고서를 손수 저장하고 분류하느라 아까운 시간을 버린 적이 있으신가요? 이 자동 PDF 저장 버튼을 내 실무에 적용한다면 어떤 대시보드 시트를 가장 먼저 구워보고 싶으신지 댓글로 공유해 주세요!

댓글 쓰기

자유롭게 질문해주세요. 단, 광고성 댓글 및 비방은 사전 통보 없이 삭제됩니다.

다음 이전