javascript - 如何使用谷歌脚本从列表中返回另一个列表中不存在的值
问题描述
我有两个清单。列表一包含所有当前员工姓名,列表二包含所有当前和过去员工姓名。
我需要开发一个脚本来返回所有过去的名字以及列表二中连接到它们的信息。我编写了这段代码,它将所有当前名称与其当前信息相匹配,但无法弄清楚如何做相反的事情。
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);
}
}
}
}
解决方案
检索数组中是否存在字符串的最简单方法是使用indexOf()
-1
如果未找到值,它将返回您- 使用flat()从数组中检索所有官员
active
并将值转换为1D
数组 - 检索所有的官员(比
issued
使用getValues
多个请求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);
}
}
}
推荐阅读
- shell - 用出现次数替换特殊字符
- python-3.x - 在 Apache Airflow 中将值从一个 DAG 传递到另一个 DAG
- r - 如何在ggplot2中将科学格式刻度标签更改为缩写形式
- php - 将 Nginx 配置为 Apache 的反向代理而不渲染 PHP
- java - JEE8 中是否有任何功能可以取消 HTTP 2 请求处理
- php - php PDO 一次更新多条记录
- .net - 在 MariaDB 10 上使用 Connector/NET 打开事务时出现语法错误
- haskell - '[] 和 ': 在 Haskell 中是什么?
- vue.js - Vuex 操作未被识别为组件数据()中的函数
- jsp - 如何比较两个数组以在jsp中设置html多选