【发布时间】:2021-02-19 20:55:21
【问题描述】:
我正在开发一个谷歌表格模板,该模板将内置一些名册维护。当名册在主“名册”选项卡上更新时,我希望工作表中的所有其他选项卡检查学生 ID #s更新的名册标签。在代码中,一个示例工作表是“anet”工作表。我正在使用 indexOf 和 for 循环来检查“anet”表中的每个值与“名册”表中的 ID。如果 ID# 已从“名册”表中删除,我希望在“anet”表中删除该行。
当我现在运行脚本时,一些行被删除了,但不是全部。 ID 列表从“roster”选项卡上的 A3 开始,另一个列表从“anet”选项卡上的 A15 开始。有人可以帮我理解为什么它会删除一些返回 indexOf 为 -1 的行,而不是我需要删除的所有行吗?
function withdrawnStudent (){
let lastRowTyler = roster.getLastRow();
let tylerData = roster.getRange(3,1,lastRowTyler,1).getValues();
let tylerArray = tylerData.map(function(r){ return r[0]});
let anetLastRow = anet.getLastRow();
let anetLastColumn = anet.getLastColumn();
let anetData = anet.getRange(15,1,anetLastRow,anetLastColumn).getValues();
let anetIDArray = anetData.map(function(r){ return r[0]});'''
for (let index = 14; index < 200; index++){
if(tylerArray.indexOf(anetIDArray[index][0]) === -1){
anet.deleteRow(index +14);
Logger.log(tylerArray.indexOf(anetIDArray[index][0]))
这是一个示例电子表格的链接。在“名册”选项卡中,它列出了四年级学生 ID。在“anet”选项卡中,应删除所有带数字的行,因为这些是 5 年级 ID。然而,并不是所有的行都会被删除,只有一些。
【问题讨论】:
-
我们可以看看一些示例数据吗?
-
这里是一个示例电子表格的链接。在“名册”选项卡中,它列出了四年级学生 ID。在“anet”选项卡中,应删除所有带数字的行,因为这些是 5 年级 ID。然而,并不是所有的行都会被删除,只有一些。
-
好吧,看起来你的表在两张表中是相同的,所以为什么你不能每次用户进行更改时用花名册中的表覆盖 anet 中的表,而不是试图找出哪些被删除循环遍历并手动删除?
-
@DaMahdi03 感谢您的回复!我是 javascript 的新手。这实际上是我编码的第一件事。我不能按照你的建议去做,因为随着学年的进行,学生将有评估数据输入。如果名称已在另一个选项卡中过滤/排序,我不希望它们被覆盖。学生的相关评估数据将被混淆。
标签: javascript arrays google-apps-script google-sheets