如何更正代码,以便在存在数据匹配时循环停止

时间:2019-05-06 21:11:34

标签: for-loop google-apps-script google-sheets

我们每天都有使用XML将新条目添加到Google表格中(表1)。我们正在使用下面的代码将这些条目拉入最终用户的单独Google表格中(第2页)。然后,最终用户可以编辑数据。我们正在尝试比较工作表1和工作表2中的ID号。每次运行代码时,工作表1中与工作表2不匹配的工作表1中的ID号应添加到工作表2中。如果工作表1中的ID号是在工作表2中已经存在,应该跳过ID号。它并没有跳过比赛。而是每次我们运行代码时,它都会将所有内容添加到工作表2中,工作表2现在包含重复项。


  for(var i = 1; i < slateDT.length; i ++) {
    var bannerid = slateDT[i][0];
    var match = "No Match";
    var j = 1;


    while(j < gradingDT.length && match == "No Match") {
      var matchID = gradingDT[j][1].trim();

      if(bannerid.trim() != matchID){ 
        j++;
      } else {
        match = "Match"; 
      }
    }

    if(match == "No Match"){ 
      additions.push(moveColumns(slateDT[i]));
    }
  }
    if(additions.length > 0) {
    gradingSS.getRange(gradingDT.length + 1, 2, additions.length, additions[0].length).setValues(additions);

     gradingDT = getDataValues(gradingSS.getName());
    var sortRng = gradingSS.getRange(2, 1, gradingDT.length, gradingDT[0].length);
    sortRng.sort(3);
  }

function moveColumns(studentRow) {
studentRow.splice(17, 3);

var v = checkDefined(studentRow.splice(20, 1));
  studentRow.splice(10, 0, v.join());

 v = checkDefined(studentRow.splice(18, 1));
  studentRow.splice(13, 0, v.join());

  v = checkDefined(studentRow.splice(20));
  studentRow.splice(14, 0, v.join());

  return studentRow;
}

1 个答案:

答案 0 :(得分:0)

好吧,我假设您怪异的moveColumns函数可以实现您想要的功能,并且根据我上面的问题,列号不匹配。将此替换为for循环:

for (var i = 0; i < slateDT.length; i++) {
    var oldID = slateDT[i][0].trim();
    var matchID = 0;
    for (var j = 1; j < gradingDT.length; j++) {    
        var newID = gradingDT[j][1].trim();
        if (oldID == newID) {
            matchID = j;
            break; //ends the j loop when it meets the match
        } 
    } //for [j] loop
    if (matchID == 0) {
        additions.push(moveColumns(slateDT[i]));
        Logger.log("No match was found for " + i);
    } else {
        Logger.log("A match was found for " + i + " at " + j);
    }
} //for [i] loop

这与您试图在while循环中执行的操作非常相似,但是在某些情况下却从未设法使J永不递增。

一旦确定可以正常工作,请注释掉两条记录器行以提高性能。