使用谷歌应用脚​​本更新数据验证规则时如何保留原始范围

Posted

技术标签:

【中文标题】使用谷歌应用脚​​本更新数据验证规则时如何保留原始范围【英文标题】:How to retain original range when updating data validation rule with google apps script 【发布时间】:2018-07-06 01:00:48 【问题描述】:

我正在尝试编写一个谷歌应用程序脚本来更新现有数据验证规则以切换“在单元格中显示下拉列表”选项。我让它大部分工作,它确实改变了“在单元格中显示下拉列表”选项,但它没有保留原始标准范围,它在不同的工作表上。它似乎正在更改范围以使用验证规则所来自的工作表而不是其他工作表。原始数据验证需要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 上指定我想要的范围,或者有没有不同的方法来更新“在单元格中显示下拉列表”选项?

【问题讨论】:

【参考方案1】:

这似乎是一个错误,应该报告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);

【讨论】:

以上是关于使用谷歌应用脚​​本更新数据验证规则时如何保留原始范围的主要内容,如果未能解决你的问题,请参考以下文章

谷歌应用脚​​本超时 ~ 5 分钟?

如何使用谷歌应用脚​​本找到最后一列?

谷歌应用脚​​本从 gmail 中删除特定附件

如何在谷歌应用脚​​本中将段落 html 字符串转换为没有 html 标签的纯文本?

如何使用谷歌应用脚​​本发送电子邮件草稿

谷歌应用脚​​本没有循环