代码之家  ›  专栏  ›  技术社区  ›  Neil Lamka

将参数/参数从Google表单自定义函数传递给脚本函数

  •  17
  • Neil Lamka  · 技术社区  · 9 年前

    我被困在一个基本的问题上。如何将参数传递给GoogleSheets自定义函数。

    我在应用程序脚本代码编辑器中定义了一个函数:

    function usageByMonth(range,theDate) {
        // do something with the arguments passed
    }
    

    在我的Google工作表中,该函数用作

    =usageByMonth('Source Meter Readings'!A5:A,B1)
    

    当尝试调试函数时,我发现这两个参数是“未定义的”。我看过很多帖子,甚至直接从示例中复制了函数,结果都一样。

    4 回复  |  直到 4 年前
        1
  •  14
  •   Alan Wells    7 年前

    从代码编辑器运行函数不会检索参数。在这种情况下,论点总是不明确的。对于使用 onEdit() 简单的触发器。唯一可以将参数传递给函数的方法是在电子表格单元格中输入有效的自定义函数。

    如果要从代码编辑器测试自定义函数的代码,必须对参数值进行“硬编码”。

    而且 Logger.log() 在工作表中计算自定义函数时,不会将任何内容记录到日志中。

    从一个工作的简单自定义函数开始,并在此基础上构建。

    如果要将一个范围传递到自定义函数的代码中,必须了解什么是二维数组:

    二维阵列:

    [  [inner Array One],  [inner Array Two], [etc]  ]
    

    来自一个范围的数据被放入一个二维数组中。有一个外部数组和内部数组。内部数组的元素数与范围中的列数一样多。

    [  ['single value from first column', 'single value second column']  ]
    

    上述2D阵列仅适用于一行两列。

    因此,要创建一个简单的自定义函数作为测试,请创建一个函数:

    function myCustomFunction(argOne) { 
      return argOne[0][0];
    };
    

    如果范围是A1:B5,则自定义函数将返回A1中的值;

    =myCustomFunction(A1:B5)
    

    要确定参数是否传递到.gs服务器函数中,唯一的方法是返回结果。

    有些输入不能使用。如果您使用了不允许的输入,那么(引用文档):

    如果自定义函数试图返回基于这些可变内置函数之一的值,它将无限期地显示Loading。

    例如,不能使用NOW()或RAND()作为参数。

        2
  •  3
  •   mrts    4 年前

    函数参数分隔符取决于电子表格区域设置。如果电子表格区域设置使用逗号作为十进制分隔符,则参数分隔符为分号:

    =usageByMonth('Source Meter Readings'!A5:A; B1)
    

    否则就不可能将小数传递到函数中。

        3
  •  0
  •   Max von Hippel MD. Sahib Bin Mahboob    6 年前

    可能是 A5:A 范围,尝试 A5:A1000 A:A .混合单元格地址 A5 具有列地址 A 可能会混淆API。

        4
  •  -1
  •   ShayneFromOz    7 年前

    确保使用精确的大小写,因为在Google脚本中标识符区分大小写。

    即。 日期与日期或日期不同

    对于那些不习惯区分大小写语言的人来说,这是一个常见的陷阱!