달나라 노트

Google Apps Script : insertCells (셀 삽입, 행 삽입, 열 삽입, insert column, insert row) 본문

Google Apps Script

Google Apps Script : insertCells (셀 삽입, 행 삽입, 열 삽입, insert column, insert row)

CosmosProject 2023. 1. 4. 19:12
728x90
반응형

 

 

 

특정 위치를 기준으로 셀을 삽입하고, 행 또는 열을 삽입하는 방법을 알아봅시다.

 

일단 셀 삽입, 행/열 삽입 기능을 사용하기 위해선 insertCells method를 이용해야 합니다.

 

 

Syntax

CellObject.insertCells(dimension)

 

insertCells method는 특정 셀의 위치를 기준으로 셀을 입하는 기능이기 때문에 Cell object에서 사용할 수 있습니다.

주로 sheet.getRange('B3') 이렇게 getRange method를 써서 특정 위치의 cell 객체에 insertCells를 사용합니다.

 

- dimension

parameter로는 dimension 하나를 받습니다. 행 방향으로 삽입을 할건지 열 방향으로 삽입을 할건지를 나타내는 인자라고 보면 됩니다.

종류는 아래 두 가지가 있습니다.

1. SpreadsheetApp.Dimension.ROWS -> 행 dimension (행 방향으로 삽입 하라는 뜻)

2. SpreadsheetApp.Dimension.COLUMNS -> 열 dimension (열 방향으로 삽입 하라는 뜻)

 

dimension에 대한 정확한 의미는 예시를 통해 알아봅시다.

 

 

 

 

 

먼저 위같은 데이터가 있다고 합시다.

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

 

 

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

  sheet.getRange('B3').insertCells(SpreadsheetApp.Dimension.ROWS);
}

 

GAS editor를 열고 위처럼 코드를 적고 실행하면 아래와 같이 바뀝니다.

 

 

차이를 아시겠나요?

 

분명히 B3셀에 1이 입력되어있었는데 B3 셀 위쪽에 셀 하나가 삽입되면서 B 컬럼에 입력된 데이터가 하나씩 밀렸습니다.

B3셀 위쪽에 셀 하나를 삽입하고 B3부터 그 아래에 있는 모든 나머지 셀들을 한 행씩 밀어내린 것이지요.

 

이제 코드를 해석해봅시다.

 

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

위 부분은 현재 spreadsheet 객체를 얻어오고,

spreadsheet에 있는 main이라는 이름을 가진 sheet 객체를 얻어오는 부분입니다.

 

 

  sheet.getRange('B3').insertCells(SpreadsheetApp.Dimension.ROWS);

중요한 것은 이거죠.

일단 sheet에서 getRange('B3')를 통해 B3 셀의 객체를 지정합니다.

그리고 B3 셀에서 isnertCells() method를 실행시켜 B3 셀을 기준으로 비어있는 셀을 삽입하겠다는 것이죠.

 

그리고 insertCells() method의 parameter를 보면 SpreadsheetApp.Dimension.ROWS 라고 적혀있습니다.

 

자 생각해봅시다. B3셀을 기준으로 셀을 삽입한다고 하면 어떤 경우의 수가 있을까요?

- B3 셀 위쪽에 셀을 삽입한다.

- B3 셀 왼쪽에 셀을 삽입한다.

- B3 셀 아래쪽에 셀을 삽입한다.

- B3 셀 오른쪽에 셀을 삽입한다.

 

즉, B3셀 기준으로 상/하/좌/우 4개 방향으로 셀을 삽입할 수 있는 경우가 있습니다.

일단 여기서 유효한 경우를 보자면 일단 셀 삽입은 특정 위치를 기준으로 왼쪽 또는 위쪽으로만 삽입됩니다.

 

이것은 Google Spreadsheet에서 정해진 규칙으로서 특정 위치를 기준으로 오른쪽 또는 아래에 셀을 삽입하는 것은 불가합니다.

 

그러면 남은 경우의 수는 아래 2가지 이겠네요.

- B3 셀 위쪽에 셀을 삽입한다.

- B3 셀 왼쪽에 셀을 삽입한다.

 

그러면 한번 생각해봅시다.

B3 셀을 기준으로 B3 셀 바로 위에 새로운 셀을 삽입하면 원래 B3 셀은 어떻게 될까요?

위쪽에 삽입했으니 B3 셀은 한줄 아래로 내려가서 B3로 옮겨질 것입니다. 마치 B3 셀을 한 행 내린 것과 같은 효과를 보이죠.

이것이 바로 SpreadsheetApp.Dimension.ROWS의 의미입니다.

ROWS 라고 적혀있죠? 셀 삽입을 하는데 기존 셀을 한 행(row)을 내리는 방향으로 이동시키라는 의미라고 보시면 됩니다.

기존 셀을 한 행 내리니 당연히 B3 로부터 위쪽에 새로운 셀이 삽입되겠죠.

 

 

여기까지 해서 위에서 봤던 예시를 다시 봅시다.

 

 

 

 

B3를 기준으로 셀 삽입을 하는데 dimension값이 SpreadsheetApp.Dimension.ROWS 입니다.

그러면 B3 셀을 한 행 내리고 B3 셀 위쪽에 새로운 셀을 삽입하라는 의미가 되겠죠.

그러면 위처럼 결과가 나온다는 것을 알 수 있을 것입니다.

 

또한 결과에서 알 수 있겠지만 B3 셀을 한 행 아래로 밀어내린다는 것은 B4, B5, B6, ...등 아래 있는 모든 셀을 한칸씩 밀어 내리라는 것과 같습니다.

 

 

 

 

SpreadsheetApp.Dimension.COLUMNS

자 그러면 위처럼 COLUMNS dimension의 의미도 알 수 있겠죠.

셀을 하나의 열 옆으로 밀어내고 새로운 셀을 삽입하라는 의미가 될겁니다.

 

예시를 보시죠.

 

다시 main 시트에 있는 데이터를 위처럼 되돌렸습니다.

 

그리고 아래 코드를 실행해봅시다.

 

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

  sheet.getRange('B3').insertCells(SpreadsheetApp.Dimension.COLUMNS);
}

 

그 결과는 아래와 같습니다.

 

 

B3 셀이 한 행 오른쪽으로 이동하며 B3 셀 왼쪽에 새로운 셀이 삽입되었죠.

 

sheet.getRange('B3').insertCells(SpreadsheetApp.Dimension.COLUMNS);

중요한건 위 부분입니다.

B3 객체를 얻어와서 insertCells() method를 실행시킵니다.

 

parameter로서 dimension이 SpreadsheetApp.Dimension.COLUMNS 으로 주어졌어요.

즉, B3 셀을 하나의 행 오른쪽으로 밀어내고 원래 B3 셀 자리에 새로운 셀을 삽입하라는 의미입니다.

 

 

 

 

 

여기까지 봤을 땐 단순히 셀 삽입이었는데

만약 하나의 행 전체 또는 하나의 열 전체를 삽입하고 싶다면 어떻게 해야할까요?

 

범위를 다르게 지정하면 됩니다.

getRange() method를 통해 지정된 범위로부터 셀을 삽입하는 것이므로,

하나의 행 전체 또는 하나의 열 전체를 범위로서 선택하면 마치 행 삽입 또는 열 삽입처럼 작동하는 것이지요.

 

 

또 다시 main sheet의 데이터를 처음으로 되돌린 후 아래 코드를 실행시켜봅시다..

 

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

  sheet.getRange('5:5').insertCells(SpreadsheetApp.Dimension.ROWS);
}

 

그 결과는 아래와 같습니다.

 

코드를 봐봅시다.

 

  sheet.getRange('5:5').insertCells(SpreadsheetApp.Dimension.ROWS);

 

sheet.getRange('5:5) -> 이것은 5번 행 전체를 선택하라는 의미입니다.

.insertCells(SpreadsheetApp.Dimension.ROWS); -> 그리고 5번 행에 있는 셀 전체를 하나의 ROW 아래로 밀어내고 기존의 5번 행에 있는 셀들의 위쪽에 하나씩 새로운 셀을 삽입하라는 의미가 됩니다. 즉, 기존의 5번 행 위쪽에 하나의 행을 삽입하는 것과 동일한 효과를 보이죠.

 

 

 

 

 

 

 

 

 

또 다시 시트를 원래대로 되돌린 후 이번에는 열 삽입을 해보겠습니다.

 

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

  sheet.getRange('C:C').insertCells(SpreadsheetApp.Dimension.COLUMNS);
}

 

자 위 코드를 보고 먼저 결과를 예측해봅시다.

 

- sheet.getRange('C:C')

sheet에 있는 C:C 범위를 얻어옵니다. C:C 범위는 C 컬럼에 있는 모든 셀을 의미합니다.

 

- .insertCells(SpreadsheetApp.Dimension.COLUMNS);

insertCells() method로 C:C 범위 기준으로 셀을 삽입합니다.

dimension이 COLUMNS로 주어졌으므로 기존 C:C에 있는 셀들을 하나의 행만큼 오른쪽으로 밀어내고 새로운 셀들을 삽입합니다.

 

여기까지보면 기존에 C:C 컬럼이 오른쪽으로 한칸 밀려서 D:D가 되고,

기존의 C:C 컬럼 왼쪽에 하나의 컬럼이 삽입되는 거라고 예상이 되네요.

 

 

그리고 결과를 보면 예상했던 것과 같이 위처럼 기존 C:C 컬럼은 하나의 행만큼 오른쪽으로 밀려서 D컬럼이 되었고,

D컬럼 왼쪽에 새로운 공백으로 된 컬럼이 삽입된 것을 볼 수 있습니다.

 

 

 

 

 

 

728x90
반응형
Comments