数据验证脚本

时间:2017-01-12 00:44:02

标签: google-apps-script google-sheets

我正在使用:

function datavalidation(event) {
  var ColA = 1;  
  var changedRange = event.source.getActiveRange();
  if (changedRange.getColumn() == ColA) { 
  var destinationRange = event.source.getActiveSheet().getRange(changedRange.getRow(),ColA+1);

  var sourceRange = event.source.getActiveSheet().getRange(changedRange.getRow(),ColA+2,changedRange.getColumn(),10);
  var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange).build();
  var rules = destinationRange.getDataValidations();
  for (var i = 0; i < rules.length; i++) {
  for (var j = 0; j < rules[i].length; j++) {
  rules[i][j] = rule;
   }
 }
 destinationRange.setDataValidations(rules);
}
}

在编辑第1列时在第2列中创建下拉菜单。它在大多数情况下工作正常,但是当我从第2列中删除任何数据验证时,它正在做出意想不到的事情。当我这样做时,可能永远不会,它在第2列的第一行运行脚本,即使我做了不要改变第1栏。只是想了解这里发生了什么。感谢

请参阅此处的公开文档:https://docs.google.com/spreadsheets/d/1kYncT7bOYWp73yr3Lh4LQreTpRFc8lZL3siqpP4xsvA/edit?usp=sharing

1 个答案:

答案 0 :(得分:0)

设置源范围的方法不正确。

function datavalidation(event) {
  var ColA = 1;  
  var changedRange = event.source.getActiveRange();
  if (changedRange.getColumn() == ColA) { 
  var destinationRange = event.source.getActiveSheet().getRange(changedRange.getRow(),ColA+1);

  var sourceRange = event.source.getActiveSheet().getRange(changedRange.getRow(),2,1,10);
  var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange).build();
  var rules = destinationRange.getDataValidations();
  for (var i = 0; i < rules.length; i++) {
  for (var j = 0; j < rules[i].length; j++) {
  rules[i][j] = rule;
   }
 }
 destinationRange.setDataValidations(rules);
}
}