【问题标题】:Custom function constantly throwing an error自定义函数不断抛出错误
【发布时间】:2019-04-27 18:10:42
【问题描述】:

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

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-script google-sheets google-sheets-formula custom-function


    【解决方案1】:

    问题:

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

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

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

    电子表格

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

    解决方案:

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

    【讨论】:

    • 我将使用建议的替代方案。谢谢!
    【解决方案2】:

    Google Apps 脚本自定义函数无法对对象(电子表格、工作表、范围等)进行更改。它们只能返回一个值或一个值数组。

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

    关于公式解析错误消息,当公式有一些“常规公式语法检查器”未捕获的语法错误时会发生,例如数组上有语法错误。

    如前所述,一种替代方法是使用自定义菜单。通常不会提及 on edit 触发器,因为它们不会在公式结果更改时触发,但在某些情况下可能会起作用,例如当预期在使用编辑单元格时进行更改时。

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多