我写了一个自定义的单元格函数,只有在给定的单元格不为空时才有指定的数据验证列表。这是功能:
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?”在单元格内调用函数时出错。
我该如何解决这个问题?
Javascript数组文字[]
不是有效的电子表格公式语法。请尝试使用{}
:
=CONDITIONALVALIDATION("Front End","E12","F12",{"x","y"});
话虽如此,正如文档中所写,自定义函数不能.setDataValidation(unitsRule)
电子表格
只读(可以使用大多数get *()方法,但不能设置*())。
要使用上面列出的服务以外的服务,请创建一个运行Apps脚本功能的自定义菜单,而不是编写自定义功能。从菜单触发的功能将在必要时要求用户进行授权,因此可以使用所有Apps脚本服务。
Google Apps脚本自定义功能无法更改对象(电子表格,工作表,范围等)。它们只能返回值或值数组。
参考。 https://developers.google.com/apps-script/guides/sheets/functions
关于公式解析错误消息,当公式具有一些语法错误时,它们会被“常规公式语法检查程序”捕获,就像在数组上有语法错误一样。
如前所述,一种替代方法是使用自定义菜单。通常没有提到编辑触发器,因为当公式的结果发生变化时它们不会被触发,但是在某些情况下可能会起作用,例如当预期在使用的编辑单元格时进行更改时。