2
我有一张工作表,其中有人复制/粘贴值。这会导致他们绕过数据验证,因为它只是“警告”它们而不是拒绝该值。等价于getDataRange()以获取带有datavalidations的范围?
我想查找具有数据验证的工作表中的所有范围。试图找到参考指南中的东西,但它似乎唯一的方法是只循环遍历每个单元格并检查其数据验证?
如果有人有更有效的方法来检查这一点,那将会很棒。
我有一张工作表,其中有人复制/粘贴值。这会导致他们绕过数据验证,因为它只是“警告”它们而不是拒绝该值。等价于getDataRange()以获取带有datavalidations的范围?
我想查找具有数据验证的工作表中的所有范围。试图找到参考指南中的东西,但它似乎唯一的方法是只循环遍历每个单元格并检查其数据验证?
如果有人有更有效的方法来检查这一点,那将会很棒。
你确实需要一个循环,但不超过细胞(这将需要一个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
}
}
}
没有喜欢更直接的方法getNamedRanges
或getProtections
。
可能的解决方法:为要验证的范围指定名称,以便您可以使用getNamedRanges
检索它们。
您是否知道可以在数据验证规则上设置'拒绝'选项,如下所示:https://i.stack.imgur.com/hYkTj.png? – Kos
是的,但尝试将无效数据粘贴到工作表中,而将其设置为拒绝。你会发现它不会拒绝这种情况下的值,但会给出警告。 – Casper
我看,看起来就像Sheets bug。您可以添加'onEdit'触发器来检查单元是否有数据有效规则,然后通过脚本“拒绝”粘贴的值。 – Kos