google-apps-script - 自定义函数不断抛出错误
问题描述
我编写了一个自定义单元格内函数,仅当给定单元格不为空时才具有指定的数据验证列表。这是那个功能:
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*() 方法,但不能使用 set*())。
解决方案:
要使用上述服务以外的服务,请创建一个运行 Apps 脚本函数的自定义菜单,而不是编写自定义函数。如果需要,从菜单触发的功能会要求用户授权,因此可以使用所有 Apps 脚本服务。
推荐阅读
- ios - 如何在 iOS 上使用具有透明度的 fontello 图标
- r - 是否有用于查找复数并计算它们的 R 函数?
- oracle - ORACLE:如何查找特定表中列对象的所有依赖项
- c# - 多个数据库提供程序的批量插入
- simple-injector - 简单注入器 .NET 标准 NuGet 包 PDB
- javascript - 绘制的多边形不显示在 openlayers
- ember.js - 未刷新页面未重新加载模型的 Ember 列表
- sql - MS Access 2010 - Access 中的第一个函数 SQL 是什么
- python - 将列表元素作为分隔字符串传递给 django 方法
- c++ - 特化模板化数据类型的模板