gpt4 book ai didi

google-apps-script - Google App Script 动态定义的自定义函数

转载 作者:行者123 更新时间:2023-12-04 20:15:43 28 4
gpt4 key购买 nike

如何从 onOpen() 动态定义电子表格的自定义函数功能码?

  • 写个代码...

  • function onOpen() {
    //var s = SoapService.wsdl("http://example.com/service.wsdl", "serv");
    //var funcs = s.getServerFunctions();
    var funcs = { "pow2": "function (v) { return v*v};" }
    for(var f in funcs)
    {
    this[f] = eval(funcs[f]) // define server functions as custom google-script functions for spreadsheet using this[function_name] = eval(function_code)
    }
    }
  • 尝试调用=pow2() (“pow2”是一个函数名)来自任何单元格
  • 收到错误“#NAME” - 未定义函数
  • 最佳答案

    GAS 不支持从电子表格调用动态函数。正如我在对@Srik 答案的评论中所写的那样,一种解决方案是使用“静态”调度程序函数,它的第一个参数是动态函数名称,从第二个参数开始是动态函数的参数。在电子表格中,它看起来像 =callFunction("pow2", 3)=callFunction("mul", 3, 1) .

    但是还有另一个问题。似乎 GAS 内部在每次调用脚本函数时都会实例化脚本,这意味着,在 onOpen 中创建的动态函数功能将在其他功能中不可见。下面的代码演示了它。包含 =pow2static(3) 的单元格包含 error: ReferenceError: "pow2" is not defined. (line XX)错误文本。

    一种解决方法是在 onOpen 中下载动态函数源代码。函数,将其存储在中间存储中 - CacheScriptDB或更好的组合Cache + ScriptDB ,在中间存储中按名称搜索代码,并在“静态”调度函数内部执行。

    function onOpen() {
    var funcs = { "pow2": "function (v) { return v*v};" }
    for(var f in funcs) {
    this[f] = eval(funcs[f]);
    }
    }

    function pow2static(val) {
    return pow2(val);
    }

    关于google-apps-script - Google App Script 动态定义的自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12929258/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com