自定义函数不断抛出错误

Custom function constantly throwing an error

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

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"]);
}

但是,当我将该函数作为自定义单元内函数调用时,我不断得到

"Formula Parse Error."

我已经排除了语法可能的原因;在我的测试函数中对该函数的调用与我在自定义单元格函数中调用它时完全相同。保存,当然是函数调用前的等号,表示是函数要运行。我也知道这个功能是被sheet识别的;没有 "Function nonexistant" 或“#NAME?”在单元格中调用函数时出错。

如何解决这个问题?

问题:

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

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

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

Spreadsheet

Read only (can use most get*() methods, but not set*()).

解决方案:

To use a service other than those listed above, create a custom menu that runs an Apps Script function instead of writing a custom function. A function that is triggered from a menu will ask the user for authorization if necessary and can consequently use all Apps Script services.

Google Apps 脚本自定义函数无法更改对象(电子表格、Sheet、范围等)。他们只能 return 一个值或一个值数组。

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

关于公式解析错误消息,当公式有一些语法错误时会出现 "regular formula syntax checker" ,例如在数组上有语法错误。

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