什么'这是比较Google Sheets中两列数据并使用Google脚本仅输出不匹配数据的最佳方法

What's the best way to compare two columns of data in Google Sheets and output ONLY the non-matching using Google Scripts?

本文关键字:Google 数据 脚本 最佳 方法 不匹配 输出 两列 比较 Sheets 什么      更新时间:2023-09-26

我有两列类似的唯一数据(A列和B列),在第三列(C列),我想输出数据,数据在B列,但不在A列。

我想在谷歌脚本中做到这一点,并尝试编写自己的if语句,循环它,但没有成功。

有人能给我指正确的方向吗?

实际上,我在工作中使用的工作表上也做了同样的事情。它查看了Col A和Col C,来自Col A的不在Col C中的将显示在Col E.中

function onOpen() {
  SpreadsheetApp.getUi().createMenu("CD Report")
  .addItem("Agreement Report", "agreementReport")
  .addToUi();
}
function agreementReport(){
  var as = SpreadsheetApp.getActive();
  var sheet = as.getSheetByName("15-16 1:1 agreement");
  var handedIn = sheet.getSheetValues(2, 1, sheet.getLastRow(), 1);
  var stuNames = sheet.getSheetValues(2, 3, sheet.getLastRow(), 1);
  var list = []; 
  for (i in stuNames){
    var curName = stuNames[i][0];
    var exists = false;
    for (j in handedIn){
      var curCheck = handedIn[j][0];
      if (curCheck == curName){
        exists = true;
        break;
      }
    } // end for j
    if (exists == false){
      list.push([curName]);
    } 
  } // end for i
  sheet.getRange(2, 5, list.length, 1).setValues(list);
} // end agreementReport

作为上述答案的补充,我认为突出显示的代码有助于新编程的人更好地理解朋友的代码的作用。因为我发现了一个简单的副作用,导致这次检查失败。有必要检查出现次数最多的列表,并在内部循环中与较小的列表进行比较。只是对代码进行了补充,使其更加通用。

/** @OnlyCurrentDoc */
function onOpen() {
  SpreadsheetApp.getUi().createMenu("CD Report")
  .addItem("Agreement Report", "agreementReport")
  .addToUi();
}
function agreementReport(){
  var plan = SpreadsheetApp.getActive();
  var sheet = plan.getSheetByName("contatos1");
      ///GREB ALL VALUES FROM THE SMALLER COLUMN
  var columnB = sheet.getSheetValues(2, 2, sheet.getLastRow(), 1);
  ///GREB ALL VALUES FROM THE GREATER COLUMN
  var columnA = sheet.getSheetValues(2, 1, sheet.getLastRow(), 1);
  
  var list = []; 
  for (i in columnA){/*START BUFF THE GREATER COLUMN*/
    var curName = columnA[i][0];
    var exists = false;
    /*START BUFF THE smaller COLUMN AND chack if all occurency in the greater column*/
    for (j in columnB){
      var curCheck = columnB[j][0];
      if (curCheck == curName){
        exists = true;
        break;
      }
    } // end for j
    if (exists == false){
      list.push([curName]);
    } 
  } // end for i
  //Logger.log(list.length);
  sheet.getRange(2, 3, list.length, 1).setValues(list);
  //Logger.log(list);
} // end agreementReport