如何比较两个工作表上的两个列A的差异,并使用Google Apps脚本更新旧工作表上的差异?

时间:2019-07-03 16:41:12

标签: google-apps-script google-sheets

当前,我在电子表格中有2个标签,它们的数据几乎相同。

第一个选项卡是从另一个电子表格导入的,具有员工姓名和他们的团队。我的第二个选项卡具有相同的信息,但是它是手动更新的。

第二个选项卡的右列取决于在这些特定单元格中的员工姓名,这使得直接IMPORTRANGE难以直接访问此工作表是因为如果在中间编辑了某些内容,权利将全部不正确,并且不再与正确的员工匹配。

我很好奇Google Apps脚本中是否可以设置一个时间事件触发器来比较两个选项卡,发现员工姓名的差异,然后将缺少的姓名添加到第一个选项卡的底部。对于缺少代码感到抱歉,我不知道从哪里开始以及如何比较两个数据集以了解Apps Script中的差异。

链接到样本表:

导入的数据-https://docs.google.com/spreadsheets/d/1NjIReOZhSmF_eaSBrt6nmUh__ycPDgPvmJ-K-APMU0I/edit?usp=sharing

工作表-https://docs.google.com/spreadsheets/d/1bFdVw0uzP7TX7JXsZ1iYajk85bKfHRrBPR02ZFDtRAU/edit?usp=sharing

1 个答案:

答案 0 :(得分:0)

这将返回名称不在两个列表中的数组,或者返回空数组。

function findNewNames() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName('Sheet1');
  var sh2=ss.getSheetByName('Sheet2');
  var nl1=sh1.getRange(1, 1,sh1.getLastRow(),1).getValues().map(function(r){return r[0]});
  var nl2=sh2.getRange(1, 1,sh2.getLastRow(),1).getValues().map(function(r){return r[0]});
  var d=0;
  if(nl1.length>nl2.length) {
    var lA=nl1.slice();
    var sA=nl2.slice();
  }
  if(nl2.length>nl1.length){
    var lA=nl2.slice();
    var sA=nl1.slice();
  }
  if(nl1.length==nl2.length) {
    return [];
  }
  for(var i=0;i<lA.length;i++) {
    if(sA.indexOf(lA[i-d])>-1) {
      lA.splice(i-d++,1)
    }
  }
  return lA;
}