달나라 노트

Google Spreadsheet Script : activate (Cell 선택하기) 본문

Google Apps Script

Google Spreadsheet Script : activate (Cell 선택하기)

CosmosProject 2021. 8. 4. 23:30
728x90
반응형

 

 

 

Google Spreadsheet(Google Excel)에서는 Microsoft Excel의 VBA를 이용한 Macro처럼 Google Spreadsheet script를 제공합니다.

 

 

Google Spreadsheet Script 관련 공식 문서 = https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app

 

 

매크로처럼 일련의 동작들을 코드로 작성하여 실행시킬 수 있습니다.

 

 

Google Spreadsheet의 확장 프로그램 -> Apps Script 편집기를 클릭하면

아래 이미지처럼 script를 입력할 수 있는 창이 나옵니다.

 

 

위처럼 코드를 적어 function을 구성해두고 해당 function을 실행시키면 내용에 있는 내용들이 실행되는 방식입니다.

 

기본적으로 코드는 Javascript랑 비슷하니 Javascript에 익숙하면 더 쉽게 접근할 수 있습니다.

 

 

이번에는 원하는 cell을 선택하는 함수를 작성해봅시다.

 

현재 test용 google sheet의 상태는 위와 같습니다.

시트1, 시트2 총 2개의 탭이 있으며

각 탭의 커서는 현재 A1셀에 놓여저 있음을 알 수 있습니다.

또한 저는 아래 이미지처럼 시트1을 클릭해두겠습니다.

 

 

 

 

 

 

위처럼 함수를 작성하고 실행은 위 이미지에 표시된 버튼을 누르면 됩니다.

(실행 버튼을 누르면 권한을 요구할 수 있습니다. 이런 경우 권한을 허용해줘야 script 실행이 가능합니다.)

 

 

자 이제 실행했으니 어떻게 되었는지 봐볼까요.

위 이미지를 보시면 script 실행 전에는 시트1과 시트2 모두에서 A1 셀을 클릭한 상태였는데

script를 실행하니 시트1만 커서가 C1 cell로 이동했으며 시트2는 A1 셀에 그대로 존재합니다.

 

이러한 변경을 만든 코드를 해석해보겠습니다.

 

 

 

function myFunction() {
  var sheet = SpreadsheetApp.getActive();  // 1
  sheet.getRange('C2').activate();         // 2
}

1. var sheet = SpreadsheetApp.getActive();

위 부분은 현재 active상태인 탭의 정보를 불러옵니다.

시트1, 시트2 중 저는 시트1을 클릭한 상태로 Script로 실행시켰기 때문에 이 코드의 결과로는 시트1의 정보가 return된다고 볼 수 있죠.

시트1 객체를 sheet라는 변수에 할당합니다.

 

2. sheet.getRange('C2').activate();

위 부분은 시트1 객체를 가진 sheet 변수에서 getRange method를 사용하여 C2 cell의 정보를 얻고 이를 activate시킵니다.

activate한다는 것은 마치 C2 셀을 클릭하여 커서를 C2 셀로 옮기는 것과 동일합니다.

 

 

 

 

function myFunction() {
  var sheet = SpreadsheetApp.getActive();
  sheet.getRange('B2:D4').activate();
}

이번엔 getRange의 인자를 B2:D4처럼 적어봅시다.

대충 감이 오실텐데 위처럼 적으면 B2부터 D4까지의 범위를 선택하게됩니다.

 

아래 이미지가 그 결과입니다.

B2:D4의 범위가 선택된 것을 볼 수 있죠.

 

 

 

 

 

 

 

 

function myFunction() {
  var sheet = SpreadsheetApp.getActive();
  sheet.getRange('A:A').activate();
}

위처럼 적으면 A컬럼 전체를 선택하게 됩니다.

 

아래 이미지가 그 결과입니다.

 

 

 

 

 

 

function myFunction() {
  var sheet = SpreadsheetApp.getActive();
  sheet.getRange('2:2').activate();
}

Google Excel에서 행은 번호로 표시되기 때문에 위처럼 행번호를 입력하면 행 전체를 선택할 수 있습니다.

 

아래 이미지가 그 결과이며 코드에 나온대로 2행의 전체가 선택된 것을 볼 수 있습니다.

 

 

 

 

 

 

 

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet.getRange('2:2').activate();
}

위처럼 getActive 대신 getActiveSpreadsheet를 사용할 수 있습니다.

getActiveSpreadsheet는 해당 Spreadsheet의 모든 Sheet를 가져옵니다.

 

여기서 용어를 하나 정의하고가야합니다.

 

 

위 시트를 보면 파일의 이름은 sript_test이며 시트1, 시트2라는 2개의 탭이 존재합니다.

 

여기서 sript_test 전체를 Spreadsheet라고 하며

시트1, 시트2는 sheet라고 합니다.

 

getActiveSpreadsheet는 script_test라는 Spreadsheet의 모든 sheet 정보를 얻어오며 그 중에서도 Active 상태인 sheet 정보까지 포함하여 가져옵니다.

 

즉, getActiveSpreadsheet로 얻어진 객체는 scrip_test라는 Spreadsheet의 정보를 모두 가지고있으며(즉, 시트1, 시트2의 모든 정보를 가지고있으며)

그 중에서 시트1이 현재 active 상태인 sheet라는 정보도 가져옵니다.

 

 

 

- getActiveSheet

별도로 getActiveSpreadsheet 대신 getActiveSheet라는 method도 있습니다.

이것은 말그대로 Spreadsheet가 아니라 Active Sheet 정보를 얻어오는 것으로 시트1, 시트2 모두가 아니라 active상태인 시트1의 정보만 가져옵니다.

따라서 getActiveSheet를 사용하면 시트1, 시트2간의 이동이 불가능할 수 있습니다.

 

 

 

 

 

 

 

728x90
반응형
Comments