Google Sheets #2를 사용한 Apps Script 기초: 스프레드시트, 스프레드시트, 범위

1. 소개

Google Sheets 기반 앱 스크립트 Codelab의 2부에 오신 것을 환영합니다. 스크립트 편집기, 매크로, 맞춤 함수의 개념에 중점을 둔 이전 Codelab입니다. 이 Codelab에서는 Google Sheets에서 데이터를 읽고 쓰고 조작하는 데 사용할 수 있는 스프레드시트 서비스를 다룹니다.

학습할 내용

  • Apps Script에서 스프레드시트, 시트, 범위가 표현되는 방식입니다.
  • SpreadsheetAppSpreadsheet 클래스를 사용하여 활성 (개방형) 스프레드시트에 액세스하고 이를 만들고 이름을 변경하는 방법
  • Sheet 클래스를 사용하여 시트의 이름과 범위의 열/행 방향을 변경하는 방법
  • Range 클래스를 사용하여 셀 그룹 또는 데이터 범위를 지정, 활성화, 이동 및 정렬하는 방법

시작하기 전에

Google Sheets 기초와 Apps Fundamentals 재생목록의 두 번째 Codelab입니다. 시작하기 전에 첫 번째 Codelab인 매크로 및 맞춤 함수를 완료해야 합니다.

필요한 항목

  • 이 재생목록의 이전 Codelab에서 살펴본 기본 Apps Script 주제에 대한 이해입니다.
  • Apps Script 편집기에 관한 기본 지식
  • Google Sheets에 관한 기본 지식
  • 스프레드시트 A1 표기법 읽기 기능
  • 자바스크립트 및 String 클래스 관련 기본 지식

다음 섹션에서는 스프레드시트 서비스의 핵심 클래스를 소개합니다.

2. 스프레드시트 서비스 소개

스프레드시트 서비스는 SpreadsheetApp, Spreadsheet, Sheet, Range 등 네 가지 클래스로 구성됩니다. 이 섹션에서는 이러한 클래스의 용도와 그 용도를 설명합니다.

SpreadsheetApp 클래스

스프레드시트, 시트, 범위를 살펴보기 전에 상위 클래스 SpreadsheetApp를 검토해야 합니다. 대부분의 스크립트는 SpreadsheetApp 메서드를 호출하여 시작합니다. Google Sheets 파일의 초기 액세스 지점을 제공할 수 있기 때문입니다. SpreadsheetAppSheets 서비스의 기본 클래스로 생각할 수 있습니다. SpreadsheetApp 클래스는 여기에서 자세히 다루지 않습니다. 그러나 이 Codelab의 뒷부분에서 이 클래스를 이해하는 데 도움이 되는 예와 연습을 모두 찾을 수 있습니다.

스프레드시트, 시트 및 그 클래스

Sheets 용어로 스프레드시트는 행과 열로 구성된 데이터가 포함된 Google Drive 파일 (Google Drive에 저장됨)입니다. 스프레드시트는 문서를 'Google Doc&#39' 또는 'Google Sheet&#39'와 같은 방식으로 지칭합니다.

Spreadsheet 클래스를 사용하여 Google Sheets 파일 데이터에 액세스하고 수정할 수 있습니다. 이 클래스를 공동작업자와의 추가와 같은 다른 파일 수준 작업에 사용할 수도 있습니다.

f00cc1a9eb606f77.png

시트** 는 스프레드시트의 개별 페이지를 나타내며, '탭'이라고도 합니다. 각 스프레드시트에는 하나 이상의 시트가 포함될 수 있습니다. Sheet** 클래스를 사용하여 데이터의 행 또는 열 이동과 같은 시트 수준 데이터와 설정에 액세스하고 수정할 수 있습니다.

39dbb10f83e3082.png

요약하면 Spreadsheet 클래스는 시트 모음에서 작동하며 Google Drive에 Google Sheets 파일을 정의합니다. Sheet 클래스는 스프레드시트 내의 개별 시트에서 작동합니다.

Range 클래스

대부분의 데이터 조작 작업 (예: 셀 데이터 읽기, 쓰기 또는 형식 지정)에서는 작업에 적용할 셀을 정의해야 합니다. Range 클래스를 사용하여 시트 내에서 특정 셀 집합을 선택할 수 있습니다. 이 클래스의 인스턴스는 시트에 있는 하나 이상의 인접한 셀의 그룹인 범위를 나타냅니다. 행과 열 번호를 기준으로 또는 A1 표기법을 사용하여 범위를 지정할 수 있습니다.

Codelab의 나머지 부분에서는 이러한 클래스와 메서드와 함께 작동하는 스크립트의 예를 보여줍니다.

3. 설정

계속하려면 일부 데이터가 포함된 스프레드시트가 필요합니다. Google에서 제공하는 링크를 클릭하여 데이터 시트를 복사한 다음 사본 만들기를 클릭하세요.

5376f721894b10d9.png

사용할 수 있는 예시 스프레드시트 사본이 Google Drive 폴더에 저장되며 '제목 없는 스프레드시트 사본'으로 이름이 지정됩니다. 이 스프레드시트를 사용하여 이 Codelab 연습을 완료하세요.

확장 프로그램 &gt Apps Script를 클릭하면 Google Sheets에서 스크립트 편집기를 열 수 있습니다.

스크립트 편집기에서 Apps Script 프로젝트를 처음 열면 스크립트 편집기에서 스크립트 프로젝트와 스크립트 파일이 모두 생성됩니다.

다음 섹션에서는 Spreadsheet 클래스를 사용하여 이 스프레드시트를 개선하는 방법을 보여줍니다.

4. 스프레드시트 액세스 및 수정

이 섹션에서는 SpreadsheetAppSpreadsheet 클래스를 사용하여 스프레드시트에 액세스하고 수정하는 방법을 알아볼 수 있습니다. 특히 연습에서는 스프레드시트의 이름을 바꾸고 스프레드시트 내에 시트를 복제하는 방법을 다룹니다.

단순한 작업이지만 더 크고 복잡한 워크플로의 일부인 경우가 많습니다. 스크립트 코드로 이러한 작업을 자동화하는 방법을 이해하면 정교한 작업을 자동화하는 방법을 더 쉽게 배울 수 있습니다.

활성 스프레드시트 이름 바꾸기

기본 이름인 '제목 없는 스프레드시트의 사본'을 스프레드시트의 용도를 더 잘 반영하는 제목으로 변경한다고 가정해 보겠습니다. SpreadsheetAppSpreadsheet 클래스를 사용하면 됩니다.

  1. 스크립트 편집기에서 기본 myFunction() 코드 블록을 다음 코드로 바꿉니다.
function renameSpreadsheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  mySS.rename("2017 Avocado Prices in Portland, Seattle");
}
  1. 스크립트를 저장하려면 save 저장을 클릭합니다.
  2. Apps Script 프로젝트의 이름을 변경하려면 제목 없는 프로젝트를 클릭하고 새 프로젝트 이름으로 "Avocado 가격"를 입력하고 이름 바꾸기를 클릭합니다.
  3. 스크립트를 실행하려면 함수 목록에서 renameSpreadsheet를 선택하고 Run을 클릭합니다.
  4. 화면에 표시된 안내에 따라 매크로를 승인합니다. '이 앱은 인증되지 않았습니다' 메시지가 표시되면 고급을 클릭한 다음 아보카도 가격으로 이동 (안전하지 않음)을 클릭합니다. 다음 화면에서 허용을 클릭합니다.

함수가 실행되면 스프레드시트의 파일 이름이 변경되어야 합니다.

226c7bc3c2fbf33e.png

입력한 코드를 살펴보겠습니다. getActiveSpreadsheet() 메서드는 활성 스프레드시트를 나타내는 객체, 즉 사용자가 만든 운동 스프레드시트의 사본을 반환합니다. 이 스프레드시트 객체는 mySS 변수에 저장됩니다. mySS에서 rename(newName)를 호출하면 Google Drive의 스프레드시트 파일 이름이 '2017 Avocado Price of Seattle, Seattle.'로 변경됩니다.

mySS 변수는 스프레드시트에 대한 참조이므로 getActiveSpreadsheet()를 반복적으로 호출하는 대신 mySS에서 Spreadsheet 메서드를 호출하여 코드를 더 깔끔하고 효율적으로 만들 수 있습니다.

활성 시트 복사

현재 스프레드시트에는 시트가 하나만 있습니다. Spreadsheet.duplicateActiveSheet() 메서드를 호출하여 시트의 사본을 만들 수 있습니다.

  1. 스크립트 프로젝트에서 이미 renameSpreadsheet() 함수 아래에 다음 새 함수를 추가합니다.
function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();
}
  1. 스크립트 프로젝트를 저장합니다.
  2. 스크립트를 실행하려면 함수 목록에서 duplicateAndOrganizeActiveSheet를 선택하고 Run을 클릭합니다.

스프레드시트로 돌아가서 새 '시트의 원본' 시트 탭이 시트에 추가되었는지 확인합니다.

D24f9f4ae20bf7d4.gif

이 새로운 함수에서 duplicateActiveSheet() 메서드는 스프레드시트에서 중복 시트를 만들고 활성화하여 반환합니다. 결과로 생성된 시트는 duplicateSheet에 저장되지만, 코드는 이 변수와 관련해 아직 아무 작업도 하지 않습니다.

다음 섹션에서는 Sheet 클래스를 사용하여 중복 시트의 이름을 변경하고 서식을 지정합니다.

5. Sheet 클래스를 사용하여 시트 서식 지정하기

Sheet 클래스는 스크립트에서 시트를 읽고 업데이트할 수 있는 메서드를 제공합니다. 이 섹션에서는 Sheet 클래스의 메서드를 사용하여 시트 이름과 열 너비를 변경하는 방법을 알아봅니다.

시트 이름 변경

시트 이름을 변경하는 것은 renameSpreadsheet()에 있던 스프레드시트 이름을 변경하기만 하면 됩니다. 단일 메서드 호출만 필요합니다.

  1. Google Sheets에서 Sheet_Original 시트를 클릭하여 활성화합니다.
  2. 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());
}
  1. 함수를 저장하고 실행합니다.

Google Sheets에서는 함수를 실행하면 중복 시트가 만들어지고 이름이 변경됩니다.

91295f42354f62e7.gif

추가된 코드에서 setName(name) 메서드는 getSheetID()를 사용하여 시트의 고유 ID 번호를 가져오는 duplicateSheet의 이름을 변경합니다. + 연산자는 시트 ID를 "Sheet_" 문자열 끝에 연결합니다.

시트의 열 및 행 수정

Sheet 클래스를 사용하여 시트 서식을 지정할 수도 있습니다. 예를 들어 중복 시트의 열 크기를 조절하고 고정된 행을 추가하기 위해 duplicateAndOrganizeActiveSheet() 함수를 업데이트할 수 있습니다.

  1. Google Sheets에서 Sheet_Original 시트를 클릭하여 활성화합니다.
  2. 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);
}
  1. 함수를 저장하고 실행합니다.

Google Sheets에서는 중복 시트가 만들어지고 이름이 변경되며 활성화되고 형식이 지정됩니다.

2e57c917ab157dad.gif

추가한 코드에서는 autoResizeColumns(startColumn, numColumns)를 사용하여 가독성을 위해 시트 열의 크기를 조절합니다. setFrozenRows(rows) 메서드는 지정된 수의 행을 고정하며 (이 경우 두 번) 리더가 스프레드시트를 아래로 스크롤할 때 헤더 행을 계속 표시합니다.

다음 섹션에서는 범위와 기본 데이터 조작에 대해 알아봅니다.

6. Range 클래스로 데이터 재정렬

Range 클래스와 메서드의 메서드는 Sheets 서비스에서 대부분의 데이터 조작 및 서식 옵션을 제공합니다.

이 섹션에서는 범위의 기본 데이터 조작을 소개합니다. 이 연습에서는 Apps Script에서 범위를 활용하는 방법을 중점적으로 다루며 이 재생목록의 다른 Codelab에서는 데이터 조작과 데이터 형식 지정을 자세히 알아봅니다.

범위 이동

스프레드시트 내에서 특정 셀 집합을 식별하는 A1 표기법을 사용하여 데이터 범위를 활성화하고 이동할 수 있습니다. 다시 알아야 하는 경우 A1 표기법에 대한 설명을 확인하세요.

일부 데이터도 이동하도록 duplicateAndOrganizeActiveSheet() 메서드를 업데이트하겠습니다.

  1. Google Sheets에서 Sheet_Original 시트를 클릭하여 활성화합니다.
  2. 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"));
}
  1. 함수를 저장하고 실행합니다.

이 함수를 실행하면 중복 시트가 생성되고 활성화되며 서식이 지정됩니다. 또한 열 F열의 콘텐츠는 C열로 이동합니다.

10ea483aec52457e.gif

새 코드는 getRange(a1Notation) 메서드를 사용하여 이동할 데이터 범위를 식별합니다. 메서드 매개변수로 A1 표기법 'F2:F&quot'를 입력하여 F열을 지정합니다 (F1 제외). 지정된 범위가 있는 경우 getRange(a1Notation) 메서드는 Range 인스턴스를 반환합니다. 이 코드는 사용 편의성을 위해 인스턴스를 myRange 변수에 저장합니다.

범위가 식별되면 moveTo(target) 메서드가 myRange의 내용 (값 및 형식 모두)을 가져와 이동합니다. 대상 (C열)은 A1 표기법 'C2"을 사용하여 지정됩니다. 열이 아닌 단일 셀입니다. 데이터를 이동할 때 크기를 타겟 및 대상 범위와 일치시킬 필요가 없습니다. Apps Script는 단순히 각 셀의 첫 번째 셀을 정렬합니다.

범위 정렬

Range 클래스를 사용하면 셀 그룹을 읽고 업데이트하고 정리할 수 있습니다. 예를 들어 Range.sort(sortSpecObj) 메서드를 사용하여 데이터 범위를 정렬할 수 있습니다.

  1. Google Sheets에서 Sheet_Original 시트를 클릭하여 활성화합니다.
  2. 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);
}
  1. 함수를 저장하고 실행합니다.

이제 함수는 이전 형식 외에도 C 열의 가격 정보를 사용하여 테이블의 모든 데이터를 정렬합니다.

A6cc9710245fae8d.png

새 코드는 getRange(a1Notation)를 사용하여 A3:D55 (열 헤더를 제외한 전체 테이블)에 적용할 새 범위를 지정합니다. 그런 다음 코드는 sort(sortSpecObj) 메서드를 호출하여 테이블을 정렬합니다. 여기서 sortSpecObj 매개변수는 정렬할 열 번호입니다. 이 메서드는 지정된 열 값이 가장 낮은 값 (오름차순)이 되도록 범위를 정렬합니다. sort(sortSpecObj) 메서드는 더 복잡한 정렬 요구사항을 충족할 수 있지만 여기에 필요하지는 않습니다. 메서드 참조 문서에서 정렬 범위를 호출할 수 있는 다양한 방법을 모두 확인할 수 있습니다.

축하합니다. Codelab의 모든 연습을 완료했습니다. 다음 섹션에서는 이 Codelab의 핵심 사항을 검토하고 이 재생목록의 다음 Codelab을 미리 봅니다.

7. 결론

이 Codelab을 마쳤습니다. 이제 Apps Script에서 필수 클래스 및 스프레드시트 서비스의 용어를 사용하고 정의할 수 있습니다.

다음 Codelab으로 넘어갈 준비가 되었습니다.

이 Codelab이 도움이 되었나요?

아니요

학습한 내용

다음 단계

이 재생목록의 다음 Codelab에서는 스프레드시트 내에서 데이터를 읽고 쓰고 수정하는 방법을 자세히 설명합니다.

데이터 작업에서 다음 Codelab을 찾습니다.