我正在尝试编写一个Google Apps脚本来更新现有的数据验证规则,以切换“在单元格中显示下拉列表”选项。我主要使用它,它确实更改了“在单元格中显示下拉列表”选项,但是它没有保留原始条件范围,该范围在另一张纸上。似乎正在更改范围以使用验证规则所来自的工作表,而不是其他工作表。原始数据验证需要一个Sheet2!A2:A
范围内的值,但是当我运行以下脚本时,它将变为需要一个Base!A2:A
范围内的值。
function turnOffDropDown() {
var baseSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Base");
var templateRange = baseSheet.getRange("B2");
var rule = templateRange.getDataValidation();
var criteria = rule.getCriteriaType();
var args = rule.getCriteriaValues();
args[1] = false;
var newRule = rule.copy().withCriteria(criteria, args).build();
templateRange.setDataValidation(newRule);
}
我做错了什么,它没有保留原始范围,是否有办法在Sheet2上指定我想要的范围,还是有其他方式来更新“在单元格中显示下拉列表”选项? / p>
答案 0 :(得分:0)
这似乎是一个错误,应该报告here。我已经尝试了您的方法并明确定义了范围,但是在保持指定单元格的同时,它始终将标准 sheet 替换为正在应用验证的表单。 (例如,验证已应用于Worksheet!C1
,因此CriteriaValues!A1:10
变为Worksheet!A1:10
。)
作为一种解决方法,鉴于您可能不会更改条件类型,因此可以尝试使用requireValueInRange()
来创建新的验证。我已经修改了您的代码,以创建“切换下拉菜单”选项。这确实会保持正确的范围。
function toggleDropDown() {
var baseSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Base");
var templateRange = baseSheet.getRange("B1");
var rule = templateRange.getDataValidation();
var args = rule.getCriteriaValues();
rule = SpreadsheetApp.newDataValidation().requireValueInRange(args[0], !args[1]).build();
templateRange.setDataValidation(rule);
}