繁体   English   中英

比较 Google 表格中两列数据和 output 只有使用 Google 脚本的不匹配数据的最佳方法是什么?

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

我有两列类似的唯一数据(A 列和 B 列),在第三列(C 列)上,我想要 output 数据,它在 B 列中,但不在 A 列中。

我想在 Google Scripts 中这样做,并尝试编写自己的 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM