Javascript 在Google应用程序脚本中找不到范围。如何做一个循环?

Javascript 在Google应用程序脚本中找不到范围。如何做一个循环?,javascript,google-apps-script,Javascript,Google Apps Script,我正在尝试执行以下代码,但它对我不起作用 我为Google Sheets录制了一个宏,它有以下代码 /** @OnlyCurrentDoc */ function ValidacionDatos() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('D3').activate(); spreadsheet.getRange('D3').setDataValidation(Spreads

我正在尝试执行以下代码,但它对我不起作用

我为Google Sheets录制了一个宏,它有以下代码

    /** @OnlyCurrentDoc */

function ValidacionDatos() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('D3').activate();
  spreadsheet.getRange('D3').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('Main!$F$3:$H$3'), true)
  .build());
  spreadsheet.getRange('D3').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('Main!$F$3:$H$3'), true)
  .build());
spreadsheet.getRange('D4').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
.requireValueInRange(spreadsheet.getRange('Main!$F$4:$H$4'), true)
  .build());
spreadsheet.getRange('D5').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
.requireValueInRange(spreadsheet.getRange('Main!$F$5:$H$5'), true)
  .build());
};
。。。等等,直到77岁

我想知道如何循环到第77行,而不必编写这么多代码

我写过这样的话:

function ValidacionDatosBucle() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('D5').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Desarrollo'), true);
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('D5').activate();
  var numfila = 3;
while (numfila < 10){
  spreadsheet.getRange('D5').activate();
  spreadsheet.getRange('D5').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('Main!$F$'&numfila&':$H$'&numfila), true)
  .build());
  numfila = numfila++
  }
函数ValidacionDatosBucle(){
var电子表格=SpreadsheetApp.getActive();
电子表格.getRange('D5').activate();
电子表格.setActiveSheet(电子表格.getSheetByName('Desarrollo'),true);
var电子表格=SpreadsheetApp.getActive();
电子表格.getRange('D5').activate();
var numfila=3;
而(努姆菲拉<10){
电子表格.getRange('D5').activate();
电子表格.getRange('D5').setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(true)
.requirewaeinrange(spreadsheet.getRange('Main!$F$'&numfila&':$H$'&numfila),true)
.build());
numfila=numfila++
}

我得到了一个错误:在第10行,文件宏中找不到范围,我想您需要的是将D列限制为Main上等效行的F到H中的值

如果是这样的话,这就是你要做的:

var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getActiveSheet(); // THIS SHEET
var os = sh.getSheetByName("Main"); // THE MAIN SHEET WITH VALIDATION VALUES
var data = os.getRange("F:H").getValues();//VALIDATION VALUES

for (var i=2; i<ss.getLastRow;i++) //lets go through your entire current sheet, starts in row 2)
    {
    var options = data[i-1];//get validatoins for just this row, offset because array
    var dv = SpreadsheetApp.newDataValidation();
    dv.setAllowInvalid(false);
    dv.requireValueInList(options, true);
    ss.getRange(i,4).setDataValidation(dv);

    }//for loop
var sh=SpreadsheetApp.getActiveSpreadsheet();
var ss=sh.getActiveSheet();//此工作表
var os=sh.getSheetByName(“Main”);//带有验证值的主工作表
var data=os.getRange(“F:H”).getValues();//验证值
对于(var i=2;i谢谢您的回复

我试图通过应用data validation-List from interval来完成某一列的单元格。必须将此时间间隔指定给相应列的每个单元格,例如D列。这是为了创建一个条件下拉列表

最后,我做了以下工作:

function Validacion2() {
  var spreadsheet = SpreadsheetApp.getActive();
  var fila = 3
  var col = 'D'
  var hoja = 'Main'
  spreadsheet.getRange('C8:C10').activate();
  while (fila < 14){
     spreadsheet.setActiveSheet(spreadsheet.getSheetByName(hoja), true);
     spreadsheet.getRange('F'+fila+':H'+fila).activate();
     spreadsheet.getRange('D'+fila).setDataValidation(SpreadsheetApp.newDataValidation()
     .setAllowInvalid(true)
     .requireValueInRange(spreadsheet.getRange(hoja+'!$F$'+fila+':$H$'+fila), true)
     .build());
     fila = fila+=1 
     }
};
函数Validacion2(){
var电子表格=SpreadsheetApp.getActive();
var fila=3
var col='D'
var hoja='Main'
电子表格.getRange('C8:C10').activate();
而(fila<14){
电子表格.setActiveSheet(电子表格.getSheetByName(hoja),true);
getRange('F'+fila+':H'+fila).activate();
电子表格.getRange('D'+fila).setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(true)
.requireRewaeInRange(电子表格.getRange(hoja+'!$F$'+fila+':$H$'+fila),true)
.build());
菲拉=菲拉+=1
}
};

验证字段的位置是什么?I整个列的验证字段位置相同,还是在向下移动时发生变化?您想做什么?