Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 等效于getDataRange()以通过数据验证获取范围?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 等效于getDataRange()以通过数据验证获取范围?

Google apps script 等效于getDataRange()以通过数据验证获取范围?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一张工作表,人们可以在其中复制/粘贴值。这导致它们绕过数据验证,因为它只是“警告”它们,而不是拒绝值 我想在工作表中查找所有具有数据验证的范围。试图在参考指南中找到一些东西,但似乎唯一的方法是循环每个单元格并检查其数据验证 如果有人有更有效的方法来检查这一点,那就太好了。您确实需要一个循环,但不是在单元格上(每个单元格需要API调用getDataValidation),而是在以下返回的双数组上: var sheet=SpreadsheetApp.getSheetByName(“Sheet1”

我有一张工作表,人们可以在其中复制/粘贴值。这导致它们绕过数据验证,因为它只是“警告”它们,而不是拒绝值

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


如果有人有更有效的方法来检查这一点,那就太好了。

您确实需要一个循环,但不是在单元格上(每个单元格需要API调用
getDataValidation
),而是在以下返回的双数组上:

var sheet=SpreadsheetApp.getSheetByName(“Sheet1”);
var range=sheet.getRange(1,1,sheet.getMaxRows(),sheet.getMaxColumns());
var rules=range.getDataValidations();
对于(var i=0;i
没有比
getNamedRanges
getProtections
更直接的方法了


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

检索它们。您是否知道可以在数据验证规则上设置“拒绝”选项,如:?是,但在将其设置为拒绝时,尝试将无效数据粘贴到工作表中。您会发现,在这种情况下,它不会拒绝该值,而是给出了一个警告。我明白了,看起来它是一个错误。您可以添加
onEdit
触发器来检查单元格是否有数据验证规则,然后通过脚本“拒绝”粘贴的值。我更喜欢创建一个每天运行的函数,在出现无效条目时将这些条目移动到另一个选项卡。但是谢谢你的考虑。
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
    }
  }
}