setValues를 사용할 수 없는 사례: 크기가 다른 범위에 입력하기
이 포스팅은 “구글 앱스 스크립트 101: 공짜로 만드는 업무 자동화 시스템” 책에 포함된 코드를 AI가 설명하도록 한 뒤에, 교정한 포스팅입니다. AI가 작성한 것을 수정하면 취소선을 표시하였습니다. 교정으로 추가하면 색상을 표시하였습니다.
목차
요약
이 블로그 포스트에서는 Apps Script에서 한 범위의 값을 다른 범위에 삽입하는 방법을 살펴보겠습니다. 특정 시트의 범위에서 값을 가져와 다른 시트의 작은 범위에 삽입하는 함수를 작성할 것입니다.
이 블로그 포스트에서는 setValues를 사용해서 값을 입력하려고 할 때에 문제가 생기는 사례를 살펴봅니다. 값의 크기와 크기가 다른 범위에 입력하는 경우입니다.
코드
1 2 3 4 5 6 7 8 9 10 11 |
function insertValuesToSmallRange() { const SS = SpreadsheetApp.getActiveSpreadsheet() const T_SHEET2 = SS.getSheetByName('시트2') const T_SHEET4 = SS.getSheetByName('시트4') const values = T_SHEET2.getDataRange().getValues() const ranges = 'A1:E1' let cell = T_SHEET4.getRange(ranges) cell.setValues(values) } |
코드 설명
이 코드는 insertValuesToSmallRange
라는 함수를 정의합니다. 함수는 활성 스프레드시트를 가져와 SS
변수에 할당합니다. ‘시트2’와 ‘시트4’라는 두 개의 시트에 대한 참조를 가져와 각각 T_SHEET2
와 T_SHEET4
변수에 할당합니다.
getDataRange
메소드를 사용하여 ‘시트2’의 범위에서 모든 값을 가져와 values
변수에 할당합니다.
getRange
메소드를 사용하여 ‘시트4’에서 지정된 범위 ‘A1:E1’를 지정하고 cell
변수에 할당합니다. 마지막으로, setValues
메소드를 사용하여 ‘시트2’의 값들을 ‘시트4’의 지정된 범위에 삽입합니다.
값의 범위와 붙여넣는 범위의 크기가 다르다는 것을 알려주지 않은 경우에는 위처럼 설명하지만, 범위가 작다는 것을 알려주면 아래와 같이 설명을 해줍니다.
insertValuesToSmallRange
함수는 ‘시트2’의 데이터를 가져와서 ‘시트4’의 작은 범위인 ‘A1:E1’에 삽입하려고 시도하는 함수입니다. 하지만 setValues
메서드를 사용할 때 주의해야 합니다.
함수의 동작은 다음과 같습니다:
1. SpreadsheetApp.getActiveSpreadsheet()
를 사용하여 현재 스프레드시트(SS)를 가져옵니다.
2. SS.getSheetByName('시트2')
를 사용하여 ‘시트2’를 가져옵니다.
3. SS.getSheetByName('시트4')
를 사용하여 ‘시트4’를 가져옵니다.
4. ‘시트2’의 모든 데이터 범위를 T_SHEET2.getDataRange().getValues()
를 통해 가져옵니다.
5. ‘시트4’의 ‘A1:E1’ 범위를 T_SHEET4.getRange(ranges)
를 통해 가져옵니다.
6. cell.setValues(values)
를 사용하여 ‘시트4’의 ‘A1:E1’ 범위에 ‘시트2’의 데이터를 삽입합니다.
주의해야 할 점은 setValues
메서드는 범위의 크기와 값의 배열 크기가 일치해야 한다는 것입니다. 여기서 ‘시트4’의 ‘A1:E1’ 범위는 1행 5열로 작은 범위입니다. 하지만 ‘시트2’에서 가져온 데이터는 보통 여러 행과 열을 포함합니다. 이렇게 큰 범위의 값을 작은 범위에 입력하려고 하면 몇 가지 결과가 발생할 수 있습니다:
1. 값이 들어가지 않음: ‘시트2’에서 가져온 값의 크기가 ‘시트4’의 ‘A1:E1’ 범위와 다르기 때문에 값을 삽입할 수 없습니다. 따라서 아무런 변화가 없을 수 있습니다.
2. 잘린 값: ‘시트2’에서 가져온 값이 ‘시트4’의 ‘A1:E1’ 범위보다 크면, 일부 값만 입력되고 나머지는 잘려서 저장될 수 있습니다.
3. 오류: 만약 ‘시트2’에서 가져온 값이 ‘시트4’의 ‘A1:E1’ 범위보다 작으면, setValues
메서드가 오류를 발생시킵니다.
올바른 내용을 포함하고 있지만, 일부 내용은 여전히 잘못 설명하고 있습니다.
따라서 ‘시트2’의 데이터를 ‘시트4’의 작은 범위에 삽입하려면 두 시트의 범위 크기가 일치하도록 맞추어야 합니다. 데이터를 삽입하기 전에 범위의 크기를 확인하고 적절한 처리를 해야 합니다.
오류가 나는 코드이기 때문에 아래의 내용을 필요가 없습니다.
예제
‘데이터’와 ‘요약’이라는 두 개의 시트를 포함하는 스프레드시트가 있다고 가정해 보겠습니다. ‘데이터’ 시트에는 A1:E5의 범위에 값들이 들어 있으며, 이 값을 ‘요약’ 시트의 A1:E1에 삽입하려고 합니다.
insertValuesToSmallRange 함수를 사용하여 이를 수행할 수 있습니다. 다음과 같이 실행해 보세요:
1 2 |
// 활성 스프레드시트가 작업 중인 스프레드시트임을 가정합니다. insertValuesToSmallRange(); |
위의 코드를 실행하면 ‘데이터’ 시트에서 값을 가져와 ‘요약’ 시트의 지정된 범위에 삽입합니다.
AI 프롬프트
한 시트의 특정 범위에서 값을 가져와 다른 시트의 작은 범위에 삽입하는 함수를 작성하세요.
함수 시그니처: function insertValuesToSmallRange()
필요한 변수: SS
, T_SHEET2
, T_SHEET4
, values
, ranges
, cell
힌트: getSheetByName
, getDataRange
, getRange
, setValues
메소드를 사용하세요.