Google Sheets의 맞춤 함수

Google 시트는 수백 개의 기본 제공 함수AVERAGE님, SUMVLOOKUP를 탭합니다. 사용 가능하지 않은 Google Apps Script를 사용하여 맞춤 함수를 작성하여 - 미터를 마일로 변환하거나 가져오기 라이브 콘텐츠를 다운로드한 다음 기본 제공 함수처럼 Google 스프레드시트에서 볼 수 있습니다.

시작하기

맞춤 함수는 표준 JavaScript를 사용하여 생성됩니다. Codecademy는 다양한 유형의 초보자를 위한 유용한 과정에 오신 것을 환영합니다. (참고: 이 과정은 Google에서 개발하지 않았으며 Google과 관련이 없습니다.)

다음은 DOUBLE라는 간단한 맞춤 함수입니다. 이 함수는 2배입니다.

/**
 * Multiplies an input value by 2.
 * @param {number} input The number to double.
 * @return The input multiplied by 2.
 * @customfunction
*/
function DOUBLE(input) {
  return input * 2;
}

JavaScript 작성 방법을 모르고 배울 시간이 없는 경우 부가기능 스토어를 확인하여 필요한 맞춤 함수를 다른 사람이 이미 빌드했는지 확인할 수 있습니다.

커스텀 함수 만들기

커스텀 함수를 작성하려면 다음 안내를 따르세요.

  1. 만들기 Google Sheets에서 스프레드시트를 엽니다.
  2. 메뉴 항목에서 확장 프로그램 >을 선택합니다. Apps Script.
  3. 스크립트 편집기에서 코드를 삭제합니다. 위 DOUBLE 함수의 경우 다음과 같이 간단합니다. 코드를 복사하여 스크립트 편집기에 붙여넣습니다.
  4. 상단에서 저장 을 클릭합니다.

이제 맞춤 함수를 사용할 수 있습니다.

Google Workspace Marketplace에서 맞춤 함수 가져오기

Google Workspace Marketplace 는 여러 가지 맞춤 기능을 기능 Google Sheets용 부가기능을 제공합니다. 이러한 부가기능을 사용하거나 탐색하려면 다음 단계를 따르세요.

  1. 만들기 Google Sheets에서 스프레드시트를 엽니다.
  2. 상단에서 부가기능 > 부가기능 설치하기
  3. Google Workspace Marketplace 메뉴가 열리면 오른쪽 상단에 있는 검색창을 클릭합니다.
  4. '맞춤 함수'를 입력합니다. Enter를 누릅니다
  5. 관심 있는 맞춤 함수 부가기능을 찾으면 설치를 클릭합니다. 설치할 수 있습니다.
  6. 부가기능을 사용하려면 승인이 필요하다는 대화상자가 표시될 수 있습니다. 그렇다면 알림을 주의 깊게 읽은 다음 허용을 클릭합니다.
  7. 부가기능을 스프레드시트에서 사용할 수 있게 됩니다. 앱에서 부가기능을 사용하려면 다른 스프레드시트를 연 다음, 다른 스프레드시트를 열고 상단에서 부가기능 > 부가기능 관리하기를 참고하세요. 사용하려는 부가기능을 찾아 클릭합니다. 옵션 > 이 캠페인에서 문서를 참조하세요.

맞춤 함수 사용

커스텀 함수를 작성하거나 Google Workspace Marketplace처럼 사용하기 쉽습니다. 내장 함수:

  1. 함수를 사용할 셀을 클릭합니다.
  2. 등호 (=)를 입력한 다음 함수 이름과 입력 값을 입력합니다. 예를 들어 =DOUBLE(A1) — Enter 키를 누릅니다.
  3. 셀에 잠시 Loading...가 표시된 후 결과를 반환합니다.

맞춤 함수 가이드라인

커스텀 함수를 작성하기 전에 알아 두어야 할 몇 가지 가이드라인이 있습니다.

이름 지정

JavaScript 함수 이름 지정을 위한 표준 규칙 외에도 다음 사항을 인지하고 있어야 합니다.

  • 맞춤 함수의 이름은 다음의 이름과 구분되어야 합니다. 기본 제공 함수SUM()입니다.
  • 맞춤 함수의 이름은 밑줄 (_)로 끝날 수 없습니다. Apps Script의 비공개 기능을 나타냅니다.
  • 맞춤 함수의 이름은 다음 구문을 사용하여 선언해야 합니다. var myFunction = new Function()가 아닌 function myFunction()입니다.
  • 대소문자는 구분하지 않지만, 스프레드시트 함수의 이름은 일반적으로 대문자입니다

인수

내장 함수와 마찬가지로 커스텀 함수는 인수를 입력 값으로 사용할 수 있습니다.

  • 단일 셀을 인수로 사용하여 함수를 호출하는 경우 (예: =DOUBLE(A1)) 인수는 셀의 값입니다.
  • 셀 범위에 대한 참조를 사용하여 함수를 인수 (예: =DOUBLE(A1:B10))가 2차원이 됩니다. 셀의 배열 값으로 사용됩니다. 예를 들어 아래 스크린샷에서 =DOUBLE(A1:B2)의 인수는 Apps Script에서 다음과 같이 해석됩니다. double([[1,3],[2,4]])입니다. DOUBLE의 샘플 코드는 위에서배열을 입력으로 허용하도록 수정되었습니다.


  • 커스텀 함수 인수는 확정적입니다. 그 것이 매번 다른 결과를 반환하는 기본 제공 스프레드시트 함수가 NOW() 또는 RAND()와 같이 계산하는 값은 인수로 허용되지 않습니다. 커스텀 함수에 추가할 수 있습니다 맞춤 함수가 휘발성 내장 함수 중 하나인 경우 Loading...를 표시합니다. 무기한으로 유지됩니다.

반환 값

모든 맞춤 함수는 다음과 같이 표시할 값을 반환해야 합니다.

  • 맞춤 함수가 값을 반환하면 값이 셀에 표시됩니다. 함수가 호출되었습니다.
  • 맞춤 함수가 값의 2차원 배열을 반환하는 경우 각 값은 인접 셀이 비어 있는 한 해당 셀이 오버플로됩니다. 만약 이렇게 한다면 배열이 기존 셀 내용을 덮어쓰게 하면 사용자설정 함수는 대신 오류가 발생합니다. 예를 보려면 커스텀 함수 최적화에 대해 자세히 알아보세요.
  • 맞춤 함수는 값을 반환하는 셀이 아닌 다른 셀에 영향을 줄 수 없습니다. 즉, 맞춤 함수는 임의의 셀을 수정할 수 없으며 셀과 그 인접한 셀의 위치를 나타냅니다. 임의의 셀을 수정하려면 대신 맞춤 메뉴를 사용하여 함수를 실행하세요.
  • 커스텀 함수 호출은 30초 이내에 반환되어야 합니다. 그렇지 않은 경우 셀에 오류(Internal error executing the custom function.)가 표시됩니다.

데이터 유형

Google Sheets는 다양한 형식을 데이터의 특성입니다. 이러한 값이 맞춤 함수에 사용되면 앱은 스크립트는 이를 적합한 데이터 유형을 사용해야 합니다. 가장 많이 혼동되는 사항은 다음과 같습니다.

  • Sheets의 시간 및 날짜는 다음과 같이 변경됩니다. Date 객체 스프레드시트와 스크립트가 다른 시간대를 사용하는 경우 (드문 경우지만) 맞춤 함수는 상쇄할 수 있습니다
  • Sheets의 Duration 값도 Date 객체가 되지만 이들과 함께 일하는 것은 복잡할 수 있습니다.
  • Sheets의 비율 값은 Apps Script에서 십진수가 됩니다. 대상 예를 들어 값이 10%인 셀은 Apps Script에서 0.1이 됩니다.

자동 완성

Google Sheets는 기본 제공 함수를 사용합니다. 사용자로서 셀에 함수 이름을 입력하면 기본 제공 및 커스텀 셀 목록이 표시됩니다. 함수를 반환합니다.

스크립트에 JsDoc @customfunction 태그에 삽입해야 합니다(아래 DOUBLE() 예 참고).

/**
 * Multiplies the input value by 2.
 *
 * @param {number} input The value to multiply.
 * @return The input multiplied by 2.
 * @customfunction
 */
function DOUBLE(input) {
  return input * 2;
}

고급

Google Apps Script 서비스 사용

커스텀 함수는 특정 Google Apps Script 서비스를 사용하여 더 복잡한 작업을 수행할 수 있습니다. 할 수 있습니다 예를 들어 커스텀 함수는 영어를 번역하는 Language 서비스 구문을 스페인어로 번역합니다.

다른 대부분의 Apps Script 유형과 달리 맞춤 함수는 사용자에게 다음을 요청하지 않습니다. 개인 정보에 대한 액세스를 승인합니다. 결과적으로 개인 정보에 액세스할 수 없는 앱. 특히 다음과 같은 정보를 제공합니다.

지원되는 서비스 참고
캐시 작동하지만 맞춤 함수에서 특별히 유용하지 않음
HTML HTML을 생성할 수 있지만 표시할 수 없음 (거의 유용하지 않음)
JDBC
언어
잠그기 작동하지만 맞춤 함수에서 특별히 유용하지 않음
지도 경로를 계산할 수는 있지만 지도를 표시할 수는 없습니다.
속성 getUserProperties()는 스프레드시트 소유자입니다. 스프레드시트 편집기는 맞춤 함수를 만들 수 있습니다.
스프레드시트 읽기 전용 (대부분의 get*() 메서드를 사용할 수 있지만 set*()는 사용할 수 없음)
다른 스프레드시트 (SpreadsheetApp.openById())를 열 수 없음 또는 SpreadsheetApp.openByUrl()).
URL 가져오기
유틸리티
XML

커스텀 함수에서 You do not have permission to call X service. 오류 메시지가 발생하면 서비스에 사용자 승인이 필요하므로 커스텀 함수에서 사용됩니다.

위에 나열되지 않은 서비스를 사용하려면 Apps Script 기능을 실행하는 맞춤 메뉴 커스텀 함수를 작성하는 대신 사용할 수 있습니다 메뉴에서 트리거되는 함수 는 필요한 경우 사용자에게 승인을 요청하므로 Apps Script 서비스.

공유

맞춤 함수는 바인드로 시작해서 스프레드시트로 변환할 수 있습니다. 이것은 한 스프레드시트를 다른 스프레드시트에서 사용할 수 없습니다. 다음 메서드를 참조하세요.

  • 확장 프로그램 > Apps Script를 클릭하여 다음을 수행합니다. 스크립트 편집기를 연 다음 원본 스프레드시트에서 스크립트 텍스트를 가져와서 스크립트 편집기에 붙여넣습니다. 복사해 보겠습니다.
  • 맞춤 함수가 포함된 스프레드시트의 사본을 만듭니다. 파일 > 사본 만들기를 참고하세요. 스프레드시트를 복사할 때 첨부한 모든 스크립트는 복사됩니다 스프레드시트에 액세스할 수 있는 사용자는 누구나 있습니다. (보기 권한만 있는 공동작업자는 스크립트 편집기를 열 수 없습니다. 원래 스프레드시트 형식으로 되어 있습니다. 그러나 사본을 만들면 볼 수 있습니다.)
  • 스크립트를 Google Sheets 편집기 부가기능으로 게시합니다.

최적화

Google 스프레드시트는 스프레드시트에서 맞춤 함수가 사용될 때마다 Apps Script 서버에 대한 별도의 호출입니다. 스프레드시트에 수십 개의 수백, 수천 개의 맞춤 함수 호출에 이르기까지, 이 프로세스는 느립니다.

따라서 대규모 데이터 세트에서 맞춤 함수를 여러 번 사용하려는 경우 사용할 수 있습니다. 이 함수가 범위를 사용할 수 있도록 수정해 보세요. 2차원 배열 형식으로 입력하면 2차원 배열을 반환합니다. 해당 셀로 오버플로될 수 있는 배열입니다.

예를 들어 위에 표시된 DOUBLE() 함수를 단일 셀 또는 셀 범위를 나타냅니다.

/**
 * Multiplies the input value by 2.
 *
 * @param {number|Array<Array<number>>} input The value or range of cells
 *     to multiply.
 * @return The input multiplied by 2.
 * @customfunction
 */
function DOUBLE(input) {
  return Array.isArray(input) ?
      input.map(row => row.map(cell => cell * 2)) :
      input * 2;
}

위의 접근 방식에서는 JavaScript의 Array 객체를 재귀적으로 매핑합니다. 셀의 2차원 배열에 있는 모든 값에 대해 DOUBLE를 호출합니다. 이 함수는 결과가 포함된 2차원 배열입니다. 이렇게 하면 DOUBLE을(를) 호출할 수 있습니다. 한 번에 한 번만 계산하도록 할 수 있지만 이는 그림과 같이 많은 셀에 대해 한 번에 계산되도록 합니다. 아래 스크린샷에서 볼 수 있습니다 중첩된 if를 사용하여 동일한 작업을 할 수 있습니다. 구문을 map 호출 대신 사용하세요.)

마찬가지로 아래의 커스텀 함수는 2차원 배열을 사용하여 두 개의 결과 열을 단일 함수 호출로 이루어집니다 각 셀에 자체 함수 호출이 필요한 경우 Apps Script 서버가 다시 로드되기 때문에 매번 XML 피드를 다운로드하고 파싱해야 합니다.

/**
 * Show the title and date for the first page of posts on the
 * Developer blog.
 *
 * @return Two columns of data representing posts on the
 *     Developer blog.
 * @customfunction
 */
function getBlogPosts() {
  var array = [];
  var url = 'https://gsuite-developers.googleblog.com/atom.xml';
  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();
  var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
  var entries = document.getRootElement().getChildren('entry', atom);
  for (var i = 0; i < entries.length; i++) {
    var title = entries[i].getChild('title', atom).getText();
    var date = entries[i].getChild('published', atom).getValue();
    array.push([title, date]);
  }
  return array;
}

이러한 기술은 Google Cloud에서 사용하는 거의 모든 맞춤 함수에 스프레드시트 전체에 반복적으로 적용될 수 있지만, 함수의 동작에 따라 달라집니다.