JavaScript

[Google Apps Script] 스프레드시트 setValue() 동작하지 않을 때

구글 스프레드시트 스크립트 setValue() 동작 문제

구글 스프레드시트 스크립트를 사용하다가 올바르게 setValue()를 사용하여 특정 셸에 값을 붙여넣으려는데 평상시와 달리 값이 들어가지 않을 때가 있습니다.

function myFunction() {
    var Sheet =
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mySheet");
    // mySheet 시트의 A1:A 범위 중복 제거 값을 B1부터 추출합니다.
    Sheet.getRange('B1').setValue('=UNIQUE(A1:A)');
}


▲ B1 셸부터 중복 제거 값이 들어와야 하는데 아무런 데이터도 없다.

그러나 정작 B열에는 아무런 데이터도 들어오지 않았습니다. 원래대로라면 UNIQUE(특정 범위의 중복 데이터를 제거한 값을 지정 열에 삽입)함수가 실행 되어야 하지만 오류조차 발생하지 않았습니다.

이러한 문제는 대체로 구글 스크립트 실행 시 다음 명령을 처리하는 데에 있어 타이밍 문제가 발생하여 값을 붙여넣어야 할 시점을 제대로 캐치하지 않아 발생하는 현상입니다. 정확하게는 스크립트 성능 향상을 위해 구글 스크립트가 getRange()를 우선적으로는 처리하지만 setValue() 함수의 작업은 일시적으로 보류할 수 있다는 의미이기 때문에 다량의 스프레드시트 데이터 변경이 있을 경우 데이터 삽입은 지연이 있는 것입니다.

일반 값이라면 대부분 문제가 없지만 수식을 사용하는 경우 해당 증상이 자주 나타날 것입니다.

해결 방법

수식 데이터를 삽입할 경우 setFomula() 함수로 대체하여 사용해봅니다.

  • 기존 – Sheet.getRange('B1').setValue('=UNIQUE(A1:A)');
  • 대체 – Sheet.getRange('B1').setFomula('=UNIQUE(A1:A)');

만약 위 방법으로도 해결되지 않는다면 setValue() 또는 setFomula() 함수를 실행한 명령문 아랫줄에 다음 내용을 추가합니다 : SpreadsheetApp.flush();

SpreadsheetApp.flush() 함수는 이러한 데이터 삽입 지연을 하지 않고 값 입력이 처리되도록 합니다. 따라서 스크립트 실행 도중에 실시간으로 데이터가 처리되는 것을 확인할 수 있으며 스크립트 동작에 발생하는 오류를 일부 막을 수 있게 됩니다.

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

1개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

1개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

1개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

1개월 ago

윈도우 11 설치 시 Microsoft 계정 로그인 없이 로컬 계정 만들기

언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…

6개월 ago

에어팟 프로 2 케이스 스피커 소리를 완전히 끄는 방법

애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…

9개월 ago