首页 > 解决方案 > 自定义函数不断抛出错误

问题描述

我编写了一个自定义单元格内函数,仅当给定单元格不为空时才具有指定的数据验证列表。这是那个功能:

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?” 在单元格内调用函数时出错。

我该如何解决这个问题?

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-formulacustom-function

解决方案


问题):

Javascript 数组文字[]不是有效的电子表格公式语法。请尝试{}

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

话虽如此,正如文档中所写,自定义函数不能.setDataValidation(unitsRule)

电子表格

只读(可以使用大多数 get*() 方法,但不能使用 set*())。

解决方案:

要使用上述服务以外的服务,请创建一个运行 Apps 脚本函数的自定义菜单,而不是编写自定义函数。如果需要,从菜单触发的功能会要求用户授权,因此可以使用所有 Apps 脚本服务。


推荐阅读