【问题标题】:how to return values from a list that are not present in another list using google script如何使用谷歌脚本从列表中返回另一个列表中不存在的值
【发布时间】:2020-07-14 04:13:10
【问题描述】:

我有两个列表。列表一包含所有当前员工姓名,列表二包含所有当前和过去员工姓名。

我需要开发一个脚本来返回所有过去的名字以及列表二中与他们相关的信息。我编写了这段代码,它将所有当前名称与其当前信息相匹配,但无法弄清楚如何进行反向操作。

function current(){

  var app = SpreadsheetApp;
 
 var activeSheet = app.getActiveSpreadsheet();

  var issued = app.getActiveSpreadsheet().getSheetByName("Issued");

  var waiting = app.getActiveSpreadsheet().getSheetByName("Waiting for Inventory");

  var active = app.getActiveSpreadsheet().getSheetByName("Active Officers");
  
 for (var j = 2; j<100; j++){ 
  
  var officer = issued.getRange(j,11).getValue();
 
  for(var i = 2; i<70; i++){ 

    var officerList = active.getRange(i, 2).getValue();

     if (officer === ""){
       continue; 
      }

     if (officer === officerList){
      var rowInfo = issued.getRange(j,1,1,12).getValues();
      var lastrow = waiting.getLastRow();
      waiting.getRange(lastrow+1,1,1,12).setValues(rowInfo);
      }
    }
  }
}

【问题讨论】:

  • Edit 提供您工作表的屏幕截图。
  • 鉴于您的问题,您的脚本没有任何意义。你的两个清单在哪里。您有四个不同的工作表 activeSheet、Issued、Waiting 和 active。

标签: javascript arrays google-apps-script


【解决方案1】:

在数组中检索字符串是否存在的最简单方法是使用indexOf()

  • 如果未找到值,它将返回 -1
  • active 中检索所有官员,并将值转换为1D 数组flat()
  • 使用getValues 检索issued 中的所有官员(比使用getValue 的多个请求更有效并循环遍历它们
  • 此设置只需要一个 for 循环而不是两个循环,这将使您的代码显着加快

示例:

function current(){
  
  var app = SpreadsheetApp;
  
  var activeSheet = app.getActiveSpreadsheet();
  
  var issued = app.getActiveSpreadsheet().getSheetByName("Issued");
  
  var waiting = app.getActiveSpreadsheet().getSheetByName("Waiting for Inventory");
  
  var active = app.getActiveSpreadsheet().getSheetByName("Active Officers");
  
  var officerList = active.getRange(2, 2, 69, 1).getValues().flat();
  var officers = issued.getRange(2,11,99,1).getValues();
  Logger.log(officerList);
  for (var j = 0; j < 99; j++){     
    var officer = officers[j][0];
    if (officerList.indexOf(officer) ==-1){
      Logger.log("officer " + officer + " from Issued does not exist in Active Officers");
      var rowInfo = issued.getRange(j+2,1,1,12).getValues();
      var lastrow = waiting.getLastRow();
      waiting.getRange(lastrow+1,1,1,12).setValues(rowInfo);
    }
  }
}

【讨论】:

  • 非常感谢您完美运行。 flat() 对值有什么作用,我阅读了解释,但仍然不明白它是如何工作的。如果你能解释一下那就太好了。
  • 当然! getValues() 返回一个二维数组,但indexOf() 需要一个一维数组才能正常工作。 flat() 将二维数组转换为一维数组,因此 [[1],[2],[3]][1,2,3]
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多