4

Google 스프레드 시트에서 새 라이브러리 기능을 시험 사용합니다. "Test"라는 식별자가있는 라이브러리를 포함하고 라이브러리가 "foo()"함수를 구현했습니다.Google 스프레드 시트 셀에서 Google 애플리케이션 스크립트 라이브러리 호출

스프레드 시트 셀에 = test.foo()를 입력하면 "unknown function name TEST.FOO" 내가 라이브러리 함수 포장 내 스프레드 시트에서 함수를 작성하는 경우

: 내 스프레드 시트가 셀에

function foo() 
{ 
    return Test.foo(); 
} 

후 사용 = foo는(), 모두 잘 있습니다. 스프레드 시트 셀에서 사용할 수 있도록 모든 라이브러리 함수에 대한 래퍼 함수를 ​​작성하면 이상적인 라이브러리를 사용하지 않게됩니다. 스프레드 시트 셀에서 라이브러리 함수를 호출하는 방법이 있습니까?

답변

4

현재 이러한 라이브러리 함수를 셀에서 직접 사용자 지정 함수로 호출하는 방법은 없습니다. 랩퍼를 작성하는 것은 현재와 같이이 작업을 수행하는 방법입니다. 라이브러리 함수를 사용자 정의 함수로 직접 호출하려면 Issue Tracker에 문제로 제기하십시오.

0

다음은이 일반 래퍼 기능을 붙여 넣으면 라이브러리 함수를 호출 할 수있는 해결 방법입니다. 그런 다음 스프레드 시트에서이를 호출 할 수 있습니다. 예를 들어

, I는 기능 MYLIB 호출 라이브러리 추가 (X, Y) (X는 전지 A1이며, Y는 셀 A2의 척)이 같은 호출 할 수 있던 경우 : = LIB_FUNC ("MYLIB ","add ", A1, A2).

약간 못 생겼지 만이 기능을 붙여 넣은 다음 라이브러리 기능에 액세스하면됩니다. 래퍼 함수를 ​​호출 할 때 범위에있는 "this"개체의 문서화되지 않은 구조에 따라 달라집니다. 이것이 시간이 지남에 따라 깨질 수있는 작은 기회. 추가로 게시 할 수 있는지 알 수 있습니다.

function LIB_FUNC(libraryName, functionName) { 
    var result; 
    var lib = this[libraryName]; 
    var extraArgs = []; 

    if (lib) { 
    var func = lib[functionName]; 

    if (func) { 
     if (arguments.length > 2) { 
     extraArgs = Array.apply(null, arguments).slice(2); 
     } 

     result = func.apply(this, extraArgs); 
    } else { 
     throw "No such function: " + functionName; 
    } 
    } else { 
    throw "No such library: " + libraryName; 
    } 

    return result; 
}