查找重复项并将值设置为True

时间:2015-07-27 19:58:03

标签: google-apps-script google-sheets

我有一个脚本,只为其中一个匹配的行设置值为True。同一电子表格中有两张纸。我有脚本检查一张纸与另一张相匹配的值。问题是它只将True置于最后一个匹配值旁边,而不是所有不同的匹配值。我如何找到所有可能的重复项并在每个重复项旁边放置True。它正在寻找的值实际上是注册码;如果有人注销,他们会输入他们的注册码,并且会在注册表中与他们的注册行匹配。

function findDuplicates() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetR = ss.getSheetByName("Registration");
  var sheetCR = ss.getSheetByName("Cancel Registration")
  var dataR = sheetR.getDataRange().getValues();
  var dataCR = sheetCR.getDataRange().getValues();
  var newData = new Array();
  var headerRow = 1;
  for (var i = 1; i < dataR.length && i < dataCR.length; ++i) {
      var rowR = dataR[i];
      var rowCR = dataCR[i];
      var duplicate = false;
          if (rowR[9] === rowCR[8]) {
              duplicate = true;
          }
  }
  if (duplicate = true) {
      sheetR.getRange(headerRow + i, 11).setValue("True");
  }
}

更新代码:

function findDuplicates() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetR = ss.getSheetByName("Registration");
  var sheetCR = ss.getSheetByName("Cancel Registration")
  var dataR = sheetR.getDataRange().getValues();
  var dataCR = sheetCR.getDataRange().getValues();
  var headerRow = 1;
  for (var i = 1; i < dataR.length && i < dataCR.length; i++) {
      var rowR = dataR[i];
      var rowCR = dataCR[i];
      var duplicate = false;
          if (rowR[9] === rowCR[8]) {
              duplicate = true;
          }
          if (duplicate === true) {
              sheetR.getRange(headerRow + i, 11).setValue("True");
          }
  }
}

更新

function findDuplicates() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetR = ss.getSheetByName("Registration");
  var sheetCR = ss.getSheetByName("Cancel Registration")
  var dataR = sheetR.getDataRange().getValues();
  var dataCR = sheetCR.getDataRange().getValues();
  var headerRow = 1;
  for (var i = 1; i < dataR.length; i++) {
      for (var j = 1; j < dataCR.length; j++) {
          var rowR = dataR[i];
          var rowCR = dataCR[j];
          var duplicate = false;
              if (rowR[9] === rowCR[8]) {
                  duplicate = true;
              }
              if (duplicate === true) {
                  sheetR.getRange(headerRow + i, 11).setValue("Y");
              }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

您的if (duplicate = true)不在for循环中。由于它根据i的值计算行,因此它仅更改i的最后一个值的值,这是在工作表中找到的最后一个重复元素。所以,我建议你把它移到for循环中。

使用上述更改测试代码,一切都按预期工作。此外,您的代码目前运行超过限制11行。也就是说,如果您的第12行是包含数据的最后一行且13为空,则它还将第13行中的列值设置为TRUE。在for循环中将++i更改为i++也可以解决此问题。

最后但并非最不重要的是,你的if语句声明需要duplicate == true而不是duplicate = true,因为第一个是检查重复的值是否为真,第二个是实际上将duplicate的值赋值为true。