2017-07-17 50 views
2

我有一张工作表,其中有人复制/粘贴值。这会导致他们绕过数据验证,因为它只是“警告”它们而不是拒绝该值。等价于getDataRange()以获取带有datavalidations的范围?

我想查找具有数据验证的工作表中的所有范围。试图找到参考指南中的东西,但它似乎唯一的方法是只循环遍历每个单元格并检查其数据验证?

如果有人有更有效的方法来检查这一点,那将会很棒。

+0

您是否知道可以在数据验证规则上设置'拒绝'选项,如下所示:https://i.stack.imgur.com/hYkTj.png? – Kos

+0

是的,但尝试将无效数据粘贴到工作表中,而将其设置为拒绝。你会发现它不会拒绝这种情况下的值,但会给出警告。 – Casper

+0

我看,看起来就像Sheets bug。您可以添加'onEdit'触发器来检查单元是否有数据有效规则,然后通过脚本“拒绝”粘贴的值。 – Kos

回答

1

你确实需要一个循环,但不超过细胞(这将需要一个API调用getDataValidation每个细胞),但在由getDataValidations返回的双阵列:

var sheet = SpreadsheetApp.getSheetByName("Sheet1"); 
var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()); 
var rules = range.getDataValidations(); 
for (var i = 0; i < rules.length; i++) { 
    for (var j = 0; j < rules[0].length; j++) { 
    if (rules[i][j]) { 
     // do something with the cell 
    } 
    } 
} 

没有喜欢更直接的方法getNamedRangesgetProtections

可能的解决方法:为要验证的范围指定名称,以便您可以使用getNamedRanges检索它们。