달나라 노트

Google Apps Script : sheet.copyTo (탭 복사, 시트 복사) 본문

Google Apps Script

Google Apps Script : sheet.copyTo (탭 복사, 시트 복사)

CosmosProject 2022. 11. 21. 21:20
728x90
반응형

 

 

 

sheet 객체에 copyTo() method를 이용하면 sheet을 복사할 수 있습니다.

 

여기서 sheet는 흔히 엑셀에서 말하는 탭을 의미합니다.

 

 

위 이미지를 보면 my_test라는 이름의 엑셀 시트가 있고,

그 엑셀 시트 안에는 main 탭과 raw 탭 2개의 탭이 존재합니다.

 

여기서 my_test라는 전체 시트는 spreadsheet라고 하며,

main, raw와 같이 흔히 탭이라고 부르는 것은 sheet라고 합니다.

 

 

 

 

 

Syntax

sheet.copyTo(destination_spreadsheet_object)

 

copyTo() method의 사용법은 위와 같습니다.

 

copyTo() method는 sheet 객체에 대해 적용할 수 있습니다.

따라서 copyTo() method가 적용된 sheet(탭)을 복사하겠다는 의미이죠.

 

- destination_spreadsheet_object

그리고 복사한 탭을 어디다가 복제할것이냐에 대한 내용은 copyTo() method의 parameter로 주어집니다.

sheet(탭)은 무조건 어떠한 spreadsheet에 속해있으므로 spreadsheet 객체가 sheet를 복사할 목적지가 되는 것입니다.

 

 

 

 

 

 

 

일단 현재 저의 샘플을 봅시다.

main, raw sheet 2개가 존재하며

main sheet에는 위처럼 데이터가 입력되어 있습니다.

B3에는 =sum(B2:D2)라는 수식도 걸려있습니다.

 

이제 이 main sheet를 my_test spreadsheet에 복사해봅시다.

 

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('main');

  sheet.copyTo(spreadsheet);
}

 

위 코드가 바로 main sheet를 복사하는 코드입니다.

 

- var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

일단 현재 active상태인 SpreadSheet 객체를 얻어옵니다.

현재 코드가 my_test spreadsheet의 Google Apps Script에 적혀있기 때문에 active 상태인 SpreadSheet 객체를 얻어온다는 것은 my_test spreadsheet 객체를 가져오라는 것과 동일합니다.

 

 

- var sheet = spreadsheet.getSheetByName('main');

그리고 spreadsheet 객체에서 복사할 main sheet(탭)의 객체를 얻어옵니다.

sheet 객체를 가져올 때에는 위처럼 getSheetByName() method를 이용합니다.

 

 

- sheet.copyTo(spreadsheet);

이 부분이 바로 sheet를 복사하는 부분입니다.

sheet 객체는 main sheet의 객체이며, 이것을 copy 하겠다는 것이죠.

그리고 copy할 위치는 spreadsheet가 됩니다.

 

위에서 spreadsheet 변수는 my_test라는 spreadsheet 객체를 담고 있으므로 my_test라는 spreadsheet에 복사하라는 의미가 됩니다.

 

 

 

위 코드의 결과는 아래와 같습니다.

 

보면 원래부터 존재했던 main, raw sheet가 보이고,

가장 오른쪽에 'main의 사본'이라는 sheet가 생겼습니다.

 

'main의 사본' 이라는 sheet를 보면 위처럼 main sheet에 있던 모든 데이터와 수식이 그대로 복사된 것을 알 수 있습니다.

 

이렇게 sheet를 복사하게 되면 새로 복사된 sheet의 이름의 규칙은 아래와 같습니다.

[기존 sheet 이름]의 사본

 

근데 이건 언어 설정에 따라 다른데 만약 언어가 영어로 설정된 환경에 따르면 아래와 같이 복사된 sheet이름이 정해집니다.

Copy of [기존 sheet 이름]

 

- 참고 링크 = https://developers.google.com/apps-script/reference/spreadsheet/sheet

 

 

 

여기서 또 한가지 궁금한게 있습니다.

 

main탭을 복사해서 main의 사본 이라는 sheet를 만들어놨는데 여기서 main탭을 또 복사하면 어떻게될까요?

직접 해봅시다. 위 코드를 한 번 더 실행시켜 보겠습니다.

 

그 결과입니다.

main의 사본 이라는 이름의 sheet가 있으면 뒤에 숫자가 1이 붙네요.

 

맞습니다.

~~의 사본이라는 sheet를 생성할 때 이미 동일한 이름이 있으면 그 뒤에 숫자를 1, 2, 3, ... 이렇게 붙여가며 복사한 sheet에 이름을 붙여줍니다.

 

 

 

 

 

 

 

 

 

이전에 봤던 예시와 동일하지만 이번에는 spreadsheet 객체를 좀 다른 방식으로 가져와보겠습니다.

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.openById('abcde12345');

  var sheet = spreadsheet.getSheetByName('main');
  
  sheet.copyTo(spreadsheet);
}

 

모든 부분이 동일하지만 spreadsheet를 openById() method를 이용해서 가져오고 있죠.

(openById() method 관련 참고 링크 = https://cosmosproject.tistory.com/708)

 

지금 sheet를 복사할 spreadsheet는 my_test라는 이름의 spreadsheet입니다.

그리고 my_test spreadsheet 파일의 ID는 abcde12345입니다.

 

따라서 abcde12345라는 ID로 my_test spreadsheet에 대한 객체를 가져올 수도 있다는 것이죠.

 

이걸 설명한 이유는 Google Apps Script를 다룰 때 객체를 얻어오는 방식은 별로 중요하지 않다는 것입니다.

그냥 어떻게든 객체만 얻어오면 많은 기능을 사용할 수 있다는 것만 알면 코딩이 한결 쉬워질겁니다.

 

 

 

 

 

 

728x90
반응형
Comments