自定义功能不断抛出一个错误(Custom function constantly throwing

2019-09-28 00:22发布

我写了一个定制的细胞功能对具有指定的数据验证列表仅在一个给定的细胞是不是空的。 下面是一个函数:

function CONDITIONALVALIDATION(sheetName,cellToCheckA1,validationCell,validationItems){
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName(sheetName);
  var cellValue = sheet.getRange(cellToCheckA1).getValue();
  var cellToSet = sheet.getRange(validationCell);
  cellToSet.clearDataValidations();
  if(cellValue!=""){
  var unitsRule = SpreadsheetApp.newDataValidation().requireValueInList(validationItems, true);
    cellToSet.setDataValidation(unitsRule)
  }
}

当我打电话的测试功能,填补了参数的CONDITIONALVALIDATION功能,在编辑器中运行它,我看到了预期的效果。 该函数如下:

function testconditional(){
  CONDITIONALVALIDATION("Front End","E12","F12",["x","y"]);
}

然而,当我调用该函数的自订细胞的功能,我不断地得到

“公式解析错误。”

我已经排除了语法,一个可能的原因; 调用在我的测试功能的功能是完全一样的,当我把它叫做一个定制的细胞功能中。 保存,当然,等于函数调用之前签署,以表明它是要运行的功能。 我也知道,功能由表认同; 没有“功能不存在的”,或“#NAME?” 当函数在细胞内被称为错误。

我该如何解决这个问题?

Answer 1:

发行人:

JavaScript数组文字[]是无效的电子表格公式语法。 尝试{}来代替:

=CONDITIONALVALIDATION("Front End","E12","F12",{"x","y"});

话虽如此,作为书面文档中,自定义功能无法.setDataValidation(unitsRule)

电子表格

只读(可以使用大部分得到*()方法,而不是设置*())。

解:

要使用比上面列出的服务,创造,而不是运行编写自定义功能的Google Apps脚本功能的自定义菜单。 如果必要的话是从一个菜单触发的功能会要求授权用户因此可以使用所有Google Apps脚本服务。



Answer 2:

谷歌Apps脚本定制功能无法使(电子表格,表,范围等),在对象上的变化。 他们只可以返回一个值或值的数组。

参考。 https://developers.google.com/apps-script/guides/sheets/functions

关于式解析错误消息时公式具有不是由“常规式语法检查器”捕获像具有在阵列上的语法错误一些语法错误时执行的。

前面已经提到,一个替代方法是使用自定义菜单。 通常是在编辑触发器没有被提及,因为它们不会被触发时的一个公式的变化,但在某些情况下结果可能工作,当它的预期,改变当使用编辑细胞制成像。



文章来源: Custom function constantly throwing an error