在google脚本中迭代后的setValue

时间:2013-04-29 19:15:08

标签: google-apps-script google-sheets google-drive-api

我正在尝试创建一个脚本,根据在一系列单元格中输入的值,在另一个工作表中搜索相关数据。然后在相应的相邻单元格中输入相应的数据。我可以得到正确的数据,但是我无法在我的工作表上设置正确单元格中的值。我错过了什么吗?

感谢您的帮助

function attend() {
  var otherSheet = SpreadsheetApp.openById("blahblah").getSheetByName("Students");
  var range = otherSheet.getRange("A1:M100");
  var students = range.getValues();
  var ss = SpreadsheetApp.openById("blahblah2").getSheetByName("Attendance");
  var range2 = ss.getRange("B7:D27");
  var students2 = range2.getValues();
  var range3 = ss.getRange("E7:E27");
  var classPack = range3.getValues();
  for (var u = 0; u < students2.length; u++){
   for (var i = 0; i < students.length; i++) {
  if (students2[u][0] == "x") {
    if (students[i][0] == "x") {
      if (students[i][10] > 0){
      var data = students[i][10]; 
       students2[u][4] = data;
       range3.setValues(classPack);
} 

  }
}
   }
  }

}

修改后的代码

function onEdit() {
  var otherSheet = SpreadsheetApp.openById("blahblah").getSheetByName("Students")
  var range = otherSheet.getRange("A1:M100")
  var students = range.getValues()
  var ss = SpreadsheetApp.openById("blahblah2").getSheetByName("Attendance")
  var range2 = ss.getRange("B7:G27")
  var students2 = range2.getValues()
  for (var u = 0; u < students2.length; u++){
  if (students2[u][0] == "x") {
    for (var i = 0; i < students.length; i++) {
      if (students[i][0] == "x") {
      var classPack = students[i][10]
      var membership = students[i][7]
      var free = students[i][8]
       students2[u][3] = classPack;
       students2[u][4] = membership;
       students2[u][5] = free;
       range2.setValues(students2);
} 

  }

  }

  }

  }

1 个答案:

答案 0 :(得分:0)

您正在从ss2读取range3,然后从range3(classpack)读取getValues(),但是您将在最后一个语句中写回具有相同值(classpack)的相同范围。因此没有其他任何内容写入工作表。

另外,我认为你不能有学生2 [u] [4]因为学生2的数值来自“B7:D27”,只有3列宽,所以学生最多只能2 [U] [2]。

我修改了你的脚本,如下所示,以便在E帮助你编写脚本的情况下写入E列。也许你可以提供更多关于你想要写入E列的信息(你的意思是从classPack获取信息/数据,或者只是写入该范围)。

function attend() {
  var otherSheet = SpreadsheetApp.openById("0AvhOXv5OGFq6dGlGT0lxb2t5MUh5S0ZscXBKeU0tTFE").getSheetByName("Students");
  var range = otherSheet.getRange("A1:M100");
  var students = range.getValues();
  var ss = SpreadsheetApp.openById("0AvhOXv5OGFq6dEhFajY5R1VWNHp6bzdTZVNGaHlXX3c").getSheetByName("Attendance");
  var range2 = ss.getRange("B7:D27");
  var students2 = range2.getValues();
  //var range3 = ss.getRange("E7:E27");
  //var classPack = range3.getValues();
  for (var u = 0; u < students2.length; u++){
    for (var i = 0; i < students.length; i++) {
      if (students2[u][0] == students[i][0]) {
        if (students[i][0]> 0) {
          var data = students[i][10]; 
          ss.getRange("E"+ (7+u)).setValue(data);
//          students2[u][4] = data;
//          range3.setValues(classPack);
        } 
      }
    }
  }
}

请注意,我没有使用/引用classPack也没有使用range3,所以很可能不是你想要的。