일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- django
- 파이썬
- Mac
- array
- Github
- Google Spreadsheet
- GIT
- Excel
- string
- SQL
- c#
- numpy
- Python
- Redshift
- Apache
- Tkinter
- matplotlib
- PostgreSQL
- google apps script
- math
- gas
- dataframe
- Java
- PANDAS
- hive
- Google Excel
- Kotlin
- PySpark
- list
- Today
- Total
달나라 노트
Google Apps Script : copyTo (셀의 값 복사 붙여넣기 하기, copy and paste) 본문
Google Apps Script : copyTo (셀의 값 복사 붙여넣기 하기, copy and paste)
CosmosProject 2021. 8. 5. 01:13
이번에는 복사 붙여넣기를 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셀로 붙여넣어지는 것과 같습니다.