“For”循环不处理所有数据行

时间:2016-01-22 20:04:27

标签: google-apps-script google-sheets

我在Google Sheet上创建了一个简单的工作表,用户可以输入注释。如果任务完成,我在第4列上有是/否数据验证。我编写的代码将完成的任务保存到另一个名为“Back Log”的工作表中。这是我的代码:

function Clear() {

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Main Note");
  var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Back Log");
  var u;
  var values = ss.getDataRange().getValues();
  var Rangecopy
  var rowNum2 = ss1.getLastRow();
  var rowNum3 = rowNum2 +1
  var Rangecopyto
  var colNum = 4;

  for (u=1;u<values.length +1;u++) {
    if (ss.getRange(u,colNum).getValue() =="Yes") {
      Rangecopy = ss.getRange(u,1,1,5)
      Rangecopyto = ss1.getRange(rowNum3,1,1,5);
      Rangecopy.copyTo(Rangecopyto);
      Rangecopy.clearContent();
      rowNum3 = rowNum3 +1;
    }
  }
}

代码完成了我的期望,但它始终保持最后一个条目不变。非常感谢帮助找出原因。 我在values.length中添加了+1,它给了我正在寻找的结果,但我认为可能有更合适的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

二维数组中的值和电子表格中的行号偏移一。电子表格中的第一行是数组中的索引0。所以,你必须调整它。您有一个不想处理的标题行,因此必须在2开始计数。

var u=2;

for (u=2;u<values.length+1;u++) {
  if (ss.getRange(u,colNum).getValue() =="Yes") {