달나라 노트

Google Apps Script : copyTo (셀의 값 복사 붙여넣기 하기, copy and paste) 본문

Google Apps Script

Google Apps Script : copyTo (셀의 값 복사 붙여넣기 하기, copy and paste)

CosmosProject 2021. 8. 5. 01:13
728x90
반응형

 

 

 

이번에는 복사 붙여넣기를 script로 구현해봅시다.

 

현재 시트 정보입니다.

 

 

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet1'));

  spreadsheet.getRange('B2').copyTo(spreadsheet.getRange('F2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL);
}

- var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

현재 spreadsheet 정보를 얻어옵니다.

 

 

- spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet1'));

복사 붙여넣기는 Sheet1에서 진행할것이므로 Sheet1을 activate 해줍니다.

 

 

- spreadsheet.getRange('B2').copyTo(spreadsheet.getRange('F2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL);

getRange('B2') = active상태인 sheet의 B2 셀의 정보를 얻어옵니다.

copyTo(spreadsheet.getRange('F2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL); = B2셀을 copy하여 F2셀에 붙여넣습니다.

붙여넣을 때의 옵션은 PASTE_NORMAL로서 그냥 Ctrl + c & Ctrl + v를 하는 것과 동일하다고 보면 됩니다.

 

 

 

위 이미지처럼 F2셀에 B2셀의 내용이 복사된 것을 볼 수 있죠.

 

 

 

 

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet1'));

  spreadsheet.getRange('B2:C6').copyTo(spreadsheet.getRange('F2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL);
}

이번에는 B2:C6의 범위를 Copy하여 F2셀에 붙여넣는 script입니다.

 

위처럼 잘 붙여넣어진 것을 알 수 있죠.

 

 

 

 

 

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet1'));

  spreadsheet.getRange('B2:C6').copyTo(spreadsheet.getRange('F2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES);
}

paste option을 PASTE_VALUES로 하면 값만 붙여넣을 수 있습니다.

 

 

 

 

 

 

만약 서로 다른 Sheet로 값을 붙여넣으려면 어떻게 해야할까요?

아래 코드를 봐봅시다.

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet2'));

  spreadsheet.getRange('\'Sheet1\'!B2:C6').copyTo(spreadsheet.getRange('C2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES);
}

- spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet2'));

Sheet2로 붙여넣을것이므로 Sheet2를 activate 해줍니다.

 

 

- spreadsheet.getRange('\'Sheet1\'!B2:C6').copyTo(spreadsheet.getRange('C2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES);

저는 Sheet1의 B2:C6의 범위를 Sheet2의 C2 셀로 paste를 할것입니다.

그러면 Sheet1의 B2:C6라는 내용을 getRange().copyTo에 명시해줘야하는데

보통 다른 sheet의 범위를 명시할땐 'Sheet1'!B2:C6 처럼 Sheet 이름을 따옴표로 감싼 후 느낌표를 쓰고 셀 범위를 적습니다.

 

근데 getRange에 명시되는 범위는 이미 따옴표로 감싸져있는 상태죠. 'B2:C6' 이것처럼요.

따라서 따옴표 속의 따옴표를 또 쓸라면 백슬래쉬(\)를 사용해서 escape를 해줘야합니다.

그 결과 '\'Sheet1\'!B2:C6' 이것처럼 적은것이죠.

 

 

 

위 코드 실행 결과입니다.

Sheet2의 C2셀을 기준으로 잘 붙여넣기가 된 것을 볼 수 있죠.

 

 

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet2'));

  spreadsheet.getRange("'Sheet1'!B2:C6").copyTo(spreadsheet.getRange('C2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES);
}

위 코드를 약간 바꿔보면

getRange에서 Sheet1의 B2:C6범위를 쌍따옴표로 묶어줄 수도 있습니다.

쌍따옴표 안에서 따옴표를 사용할 땐 별도의 escape가 필요 없으므로 위처럼 깔끔하게 코드를 적을 수 있죠.

 

 

 

 

 

- tip

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet2'));

  spreadsheet.getRange("'Sheet1'!B2:C6").copyTo(spreadsheet.getRange('C2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}

간혹 PASTE_VALUES 옵션으로 값 붙여넣기를 할 때 값 붙여넣기가 아니라 일반 붙여넣기로 적용될 때가 있습니다.

이런 경우 copyTo의 두 번째 인자로서 false를 입력해주면 해결되는 경우가 있습니다.

 

 

- tip

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet2'));

  spreadsheet.getRange('B:B').copyTo(spreadsheet.getRange('C2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}

copyTo() method를 사용할 때 getRange()에서 반드시 특정 셀이나 한정된 범위만을 얻어오기만 할 수 있는 것은 아닙니다.

위 예시를 보면 getRange('B:B')라고 적혀있는데 이것은 B 컬럼 전체의 값을 의미합니다.

따라서 위처럼 적용하면 B컬럼 전체의 값이 C2 셀을 시작으로 붙여넣어집니다.

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet2'));

  spreadsheet.getRange('3:3').copyTo(spreadsheet.getRange('C2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}

비슷한 맥락으로 행 전체를 선택할 수도 있습니다.

getRange('3:3') 이것은 3번 행 전체를 의미합니다.

따라서 위 코드는 3번 행 전체의 값을 복사해서 C2 셀을 시작으로 붙여넣게 됩니다.

 

여기서 3행이면 A3 값이 가장 왼쪽에 있는 처음 값일텐데 이것이 C2셀에 붙여넣어지고

그 다음인 B3 셀의 값이 C2셀의 다음인 D2셀로 붙여넣어지는 것과 같습니다.

 

 

 

 

 

 

728x90
반응형
Comments