1. 소개
Google Sheets를 사용한 Apps Script 기본사항 Codelab 재생목록의 두 번째 파트에 오신 것을 환영합니다. 이전 Codelab에서는 스크립트 편집기, 매크로, 맞춤 함수의 개념에 중점을 두었습니다. 이 Codelab에서는 Google Sheets에서 데이터를 읽고 쓰고 조작하는 데 사용할 수 있는 스프레드시트 서비스를 자세히 살펴봅니다.
학습할 내용
- 스프레드시트, 시트, 범위가 Apps Script에서 표현되는 방식
SpreadsheetApp
및Spreadsheet
클래스를 사용하여 활성 (열린) 스프레드시트에 액세스하고, 스프레드시트를 만들고, 스프레드시트의 이름을 바꾸는 방법Sheet
클래스를 사용하여 시트 이름과 범위의 열/행 방향을 변경하는 방법Range
클래스를 사용하여 셀 그룹 또는 데이터 범위를 지정, 활성화, 이동, 정렬하는 방법
시작하기 전에
이 Codelab은 Google Sheets를 사용한 Apps Script 기본사항 재생목록의 두 번째 Codelab입니다. 시작하기 전에 첫 번째 Codelab인 매크로 및 맞춤 함수를 완료해야 합니다.
필요한 항목
- 이 재생목록의 이전 Codelab에서 살펴본 기본 Apps Script 주제를 이해해야 합니다.
- Apps Script 편집기에 대한 기본적인 지식
- Google Sheets에 관한 기본 지식
- Sheets A1 표기법을 읽을 수 있음
- JavaScript 및 해당
String
클래스에 관한 기본 지식
다음 섹션에서는 스프레드시트 서비스의 핵심 클래스를 소개합니다.
2. 스프레드시트 서비스 소개
스프레드시트 서비스의 기반을 포함하는 클래스는 SpreadsheetApp
, Spreadsheet
, Sheet
, Range
의 네 가지입니다. 이 섹션에서는 이러한 클래스와 용도를 설명합니다.
SpreadsheetApp 클래스
스프레드시트, 시트, 범위를 자세히 살펴보기 전에 상위 클래스인 SpreadsheetApp
를 검토해야 합니다. 많은 스크립트가 Google Sheets 파일에 대한 초기 액세스 포인트를 제공할 수 있으므로 SpreadsheetApp
메서드를 호출하여 시작합니다. SpreadsheetApp
은 스프레드시트 서비스의 기본 클래스라고 생각하면 됩니다. 여기서는 SpreadsheetApp
클래스를 자세히 살펴보지 않습니다. 하지만 이 Codelab의 뒷부분에서 이 클래스를 이해하는 데 도움이 되는 예와 연습을 확인할 수 있습니다.
스프레드시트, 시트, 클래스
Sheets 용어로서 스프레드시트는 행과 열로 구성된 데이터가 포함된 Google Sheets 파일 (Google Drive에 저장됨)입니다. 문서를 'Google 문서'라고 하는 것과 마찬가지로 스프레드시트를 'Google 시트'라고도 합니다.
Spreadsheet
클래스를 사용하여 Google Sheets 파일 데이터에 액세스하고 수정할 수 있습니다. 공동작업자 추가와 같은 다른 파일 수준 작업에도 이 클래스를 사용할 수 있습니다.
시트는 스프레드시트의 개별 페이지를 나타내며 '탭'이라고도 합니다. 각 스프레드시트에는 하나 이상의 시트가 포함될 수 있습니다. Sheet
** 클래스를 사용하여 데이터 행 또는 열을 이동하는 등 시트 수준 데이터 및 설정에 액세스하고 이를 수정할 수 있습니다.
요약하자면 Spreadsheet
클래스는 시트 모음에서 작동하며 Google Drive에 Google Sheets 파일을 정의합니다. Sheet
클래스는 스프레드시트 내의 개별 시트에서 작동합니다.
Range 클래스
대부분의 데이터 조작 작업 (예: 셀 데이터 읽기, 쓰기 또는 서식 지정)에는 작업이 적용되는 셀을 정의해야 합니다. Range
클래스를 사용하여 시트 내에서 특정 셀 집합을 선택할 수 있습니다. 이 클래스의 인스턴스는 범위, 즉 시트의 하나 이상의 인접한 셀 그룹을 나타냅니다. 행 및 열 번호 또는 A1 표기법을 사용하여 범위를 지정할 수 있습니다.
Codelab의 나머지 부분에서는 이러한 클래스와 메서드를 사용하는 스크립트의 예를 보여줍니다.
3. 설정
계속하기 전에 데이터가 포함된 스프레드시트가 필요합니다. 이 링크를 클릭하여 데이터 시트를 복사한 다음 사본 만들기를 클릭하세요.
사용할 수 있는 예시 스프레드시트의 사본이 Google Drive 폴더에 저장되고 이름은 '제목 없는 스프레드시트 사본'으로 지정됩니다. 이 스프레드시트를 사용하여 이 Codelab의 연습을 완료하세요.
확장 프로그램> Apps Script를 클릭하여 Google Sheets에서 스크립트 편집기를 열 수 있습니다.
스크립트 편집기에서 Apps Script 프로젝트를 처음 열면 스크립트 편집기에서 스크립트 프로젝트와 스크립트 파일을 모두 만듭니다.
다음 섹션에서는 Spreadsheet
클래스를 사용하여 이 스프레드시트를 개선하는 방법을 보여줍니다.
4. 스프레드시트 액세스 및 수정
이 섹션에서는 SpreadsheetApp
및 Spreadsheet
클래스를 사용하여 스프레드시트에 액세스하고 수정하는 방법을 알아봅니다. 특히 이 연습에서는 스프레드시트의 이름을 바꾸고 스프레드시트 내에서 시트를 복제하는 방법을 알아봅니다.
이러한 작업은 간단하지만 더 크고 복잡한 워크플로의 일부인 경우가 많습니다. 스크립트 코드로 이러한 작업을 자동화하는 방법을 이해하면 더 복잡한 작업을 자동화하는 방법을 더 쉽게 배울 수 있습니다.
활성 스프레드시트의 이름을 바꿉니다.
기본 이름인 '제목 없는 스프레드시트의 사본'을 스프레드시트의 목적을 더 잘 반영하는 제목으로 변경한다고 가정해 보겠습니다. SpreadsheetApp
및 Spreadsheet
클래스를 사용하여 이 작업을 수행할 수 있습니다.
- 스크립트 편집기에서 기본
myFunction()
코드 블록을 다음 코드로 바꿉니다.
function renameSpreadsheet() { var mySS = SpreadsheetApp.getActiveSpreadsheet(); mySS.rename("2017 Avocado Prices in Portland, Seattle"); }
- 스크립트를 저장하려면 저장
을 클릭합니다.
- Apps Script 프로젝트의 이름을 바꾸려면 제목 없는 프로젝트를 클릭하고 새 프로젝트 이름으로 '아보카도 가격'을 입력한 다음 이름 바꾸기를 클릭합니다.
- 스크립트를 실행하려면 함수 목록에서
renameSpreadsheet
를 선택하고 실행을 클릭합니다. - 화면에 표시된 안내에 따라 매크로를 승인합니다. '이 앱은 인증되지 않았습니다'라는 메시지가 표시되면 고급을 클릭한 다음 아보카도 가격으로 이동 (안전하지 않음)을 클릭합니다. 다음 화면에서 허용을 클릭합니다.
함수가 실행되면 스프레드시트의 파일 이름이 변경됩니다.
입력한 코드를 살펴보겠습니다. getActiveSpreadsheet()
메서드는 활성 스프레드시트, 즉 사용자가 만든 연습 스프레드시트의 사본을 나타내는 객체를 반환합니다. 이 스프레드시트 객체는 mySS
변수에 저장됩니다. mySS
에서 rename(newName)
를 호출하면 Google Drive의 스프레드시트 파일 이름이 '2017 Avocado Prices in Portland, Seattle'로 변경됩니다.
mySS
변수는 스프레드시트의 참조이므로 getActiveSpreadsheet()
를 반복적으로 호출하는 대신 mySS
에서 Spreadsheet
메서드를 호출하여 코드를 더 깔끔하고 효율적으로 만들 수 있습니다.
활성 시트 복사
현재 스프레드시트에는 시트가 하나만 있습니다. Spreadsheet.duplicateActiveSheet()
메서드를 호출하여 시트의 사본을 만들 수 있습니다.
- 스크립트 프로젝트에 이미 있는
renameSpreadsheet()
함수 아래에 다음 새 함수를 추가합니다.
function duplicateAndOrganizeActiveSheet() { var mySS = SpreadsheetApp.getActiveSpreadsheet(); var duplicateSheet = mySS.duplicateActiveSheet(); }
- 스크립트 프로젝트를 저장합니다.
- 스크립트를 실행하려면 함수 목록에서
duplicateAndOrganizeActiveSheet
를 선택하고 실행을 클릭합니다.
Sheets로 돌아가면 스프레드시트에 'Sheet_Original의 사본'이라는 새 시트 탭이 추가된 것을 확인할 수 있습니다.
이 새 함수에서 duplicateActiveSheet()
메서드는 스프레드시트에서 중복 시트를 만들고 활성화하고 반환합니다. 이 결과 시트는 duplicateSheet
에 저장되지만 코드는 아직 이 변수를 사용하지 않습니다.
다음 섹션에서는 Sheet
클래스를 사용하여 중복 시트의 이름을 바꾸고 형식을 지정합니다.
5. Sheet 클래스로 시트 서식 지정
Sheet
클래스는 스크립트가 시트를 읽고 업데이트할 수 있는 메서드를 제공합니다. 이 섹션에서는 Sheet
클래스의 메서드를 사용하여 시트 이름과 열 너비를 변경하는 방법을 알아봅니다.
시트 이름 변경
시트 이름을 바꾸는 것은 renameSpreadsheet()
에서 스프레드시트 이름을 바꾸는 것만큼 간단합니다. 메서드 호출 하나만 필요합니다.
- Google Sheets에서
Sheet_Original
시트를 클릭하여 활성화합니다. - Apps Script에서 다음과 일치하도록
duplicateAndOrganizeActiveSheet()
함수를 수정합니다.
function duplicateAndOrganizeActiveSheet() { var mySS = SpreadsheetApp.getActiveSpreadsheet(); var duplicateSheet = mySS.duplicateActiveSheet(); // Change the name of the new sheet. duplicateSheet.setName("Sheet_" + duplicateSheet.getSheetId()); }
- 함수를 저장하고 실행합니다.
함수를 실행하면 Google Sheets에서 중복 시트가 생성되고 이름이 변경됩니다.
추가된 코드에서 setName(name)
메서드는 getSheetID()
를 사용하여 시트의 고유 ID 번호를 가져와 duplicateSheet
의 이름을 변경합니다. +
연산자는 시트 ID를 "Sheet_"
문자열 끝에 연결합니다.
시트의 열 및 행 수정
Sheet
클래스를 사용하여 시트의 형식을 지정할 수도 있습니다. 예를 들어 중복 시트의 열 크기를 조절하고 고정 행을 추가하도록 duplicateAndOrganizeActiveSheet()
함수를 업데이트할 수 있습니다.
- Google Sheets에서
Sheet_Original
시트를 클릭하여 활성화합니다. - Apps Script에서 다음과 일치하도록
duplicateAndOrganizeActiveSheet()
함수를 수정합니다.
function duplicateAndOrganizeActiveSheet() { var mySS = SpreadsheetApp.getActiveSpreadsheet(); var duplicateSheet = mySS.duplicateActiveSheet(); // Change the name of the new sheet. duplicateSheet.setName("Sheet_" + duplicateSheet.getSheetId()); // Format the new sheet. duplicateSheet.autoResizeColumns(1, 5); duplicateSheet.setFrozenRows(2); }
- 함수를 저장하고 실행합니다.
Google Sheets에서 중복 시트가 생성되고, 이름이 바뀌고, 활성화되고, 서식이 지정됩니다.
추가한 코드는 autoResizeColumns(startColumn, numColumns)
를 사용하여 가독성을 위해 시트의 열 크기를 조정합니다. setFrozenRows(rows)
메서드는 지정된 행 수 (이 경우 2)를 고정하여 독자가 스프레드시트를 아래로 스크롤할 때 헤더 행이 표시되도록 합니다.
다음 섹션에서는 범위와 기본 데이터 조작에 대해 알아봅니다.
6. Range 클래스로 데이터 재정렬
Range
클래스와 그 메서드는 스프레드시트 서비스에서 대부분의 데이터 조작 및 서식 옵션을 제공합니다.
이 섹션에서는 범위를 사용한 기본적인 데이터 조작을 소개합니다. 이 연습에서는 Apps Script에서 범위를 활용하는 방법을 중점적으로 다루며, 이 재생목록의 다른 Codelab에서는 데이터 조작 및 데이터 서식 지정에 대해 더 자세히 설명합니다.
범위 이동
클래스 메서드와 A1 표기법(스프레드시트 내에서 특정 셀 집합을 식별하는 약어)을 사용하여 데이터 범위를 활성화하고 이동할 수 있습니다. 다시 숙지해야 하는 경우 A1 표기법 설명을 확인하세요.
일부 데이터를 이동하도록 duplicateAndOrganizeActiveSheet()
메서드를 업데이트해 보겠습니다.
- Google Sheets에서
Sheet_Original
시트를 클릭하여 활성화합니다. - Apps Script에서 다음과 일치하도록
duplicateAndOrganizeActiveSheet()
함수를 수정합니다.
function duplicateAndOrganizeActiveSheet() { var mySS = SpreadsheetApp.getActiveSpreadsheet(); var duplicateSheet = mySS.duplicateActiveSheet(); // Change the name of the new sheet. duplicateSheet.setName("Sheet_" + duplicateSheet.getSheetId()); // Format the new sheet. duplicateSheet.autoResizeColumns(1, 5); duplicateSheet.setFrozenRows(2); // Move column F to column C. var myRange = duplicateSheet.getRange("F2:F"); myRange.moveTo(duplicateSheet.getRange("C2")); }
- 함수를 저장하고 실행합니다.
이 함수를 실행하면 중복 시트가 생성되고 활성화되며 서식이 지정됩니다. F열의 콘텐츠가 C열로 이동합니다.
새 코드는 getRange(a1Notation)
메서드를 사용하여 이동할 데이터 범위를 식별합니다. 메서드의 매개변수로 A1 표기법 'F2:F'를 입력하면 F1을 제외한 F열이 지정됩니다. 지정된 범위가 있으면 getRange(a1Notation)
메서드는 Range
인스턴스를 반환합니다. 이 코드는 사용 편의성을 위해 인스턴스를 myRange
변수에 저장합니다.
범위가 식별되면 moveTo(target)
메서드가 myRange
의 콘텐츠 (값과 서식 모두)를 가져와 이동합니다. 목적지 (열 C)는 A1 표기법 'C2'를 사용하여 지정됩니다. 열이 아닌 단일 셀입니다. 데이터를 이동할 때 크기를 대상 및 대상 범위와 일치시킬 필요가 없습니다. Apps Script는 각 셀의 첫 번째 셀을 정렬합니다.
범위 정렬
Range
클래스를 사용하면 셀 그룹을 읽고, 업데이트하고, 정리할 수 있습니다. 예를 들어 Range.sort(sortSpecObj)
메서드를 사용하여 데이터 범위를 정렬할 수 있습니다.
- Google Sheets에서
Sheet_Original
시트를 클릭하여 활성화합니다. - Apps Script에서 다음과 일치하도록
duplicateAndOrganizeActiveSheet()
함수를 수정합니다.
function duplicateAndOrganizeActiveSheet() { var mySS = SpreadsheetApp.getActiveSpreadsheet(); var duplicateSheet = mySS.duplicateActiveSheet(); // Change the name of the new sheet. duplicateSheet.setName("Sheet_" + duplicateSheet.getSheetId()); // Format the new sheet. duplicateSheet.autoResizeColumns(1, 5); duplicateSheet.setFrozenRows(2); // Move column F to column C. var myRange = duplicateSheet.getRange("F2:F"); myRange.moveTo(duplicateSheet.getRange("C2")); // Sort all the data using column C (Price information). myRange = duplicateSheet.getRange("A3:D55"); myRange.sort(3); }
- 함수를 저장하고 실행합니다.
이제 함수는 이전 형식 지정 외에도 C열의 가격 정보를 사용하여 표의 모든 데이터를 정렬합니다.
새 코드에서는 getRange(a1Notation)
를 사용하여 A3:D55 (열 헤더를 제외한 전체 표)를 포함하는 새 범위를 지정합니다. 그런 다음 코드는 sort(sortSpecObj)
메서드를 호출하여 표를 정렬합니다. 여기서 sortSpecObj
매개변수는 정렬할 열 번호입니다. 이 메서드는 표시된 열 값이 가장 낮은 값에서 가장 높은 값으로 (오름차순 값) 정렬되도록 범위를 정렬합니다. sort(sortSpecObj)
메서드는 더 복잡한 정렬 요구사항을 실행할 수 있지만 여기서는 필요하지 않습니다. 메서드 참조 문서에서 sort ranges를 호출할 수 있는 모든 방법을 확인할 수 있습니다.
축하합니다. Codelab의 모든 연습을 완료했습니다. 다음 섹션에서는 이 Codelab의 핵심 사항을 검토하고 이 재생목록의 다음 Codelab을 미리 살펴봅니다.
7. 결론
이 Codelab을 완료했습니다. 이제 Apps Script에서 스프레드시트 서비스의 필수 클래스와 용어를 사용하고 정의할 수 있습니다.
다음 Codelab으로 이동할 준비가 되었습니다.
이 Codelab이 도움이 되었나요?
학습한 내용
- 스프레드시트, 시트, 범위가 Apps Script에서 표현되는 방식
SpreadsheetApp
,Spreadsheet
,Sheet
,Range
클래스의 몇 가지 기본 사용법
다음 단계
이 재생목록의 다음 Codelab에서는 스프레드시트 내에서 데이터를 읽고, 쓰고, 수정하는 방법을 자세히 설명합니다.
다음 Codelab은 데이터 작업에서 확인할 수 있습니다.