循环无法正常运行 谷歌应用脚本



我的循环没有按预期运行,我真的很难解决问题,因为它似乎在工作,我必须手动重复脚本才能完成任务。。。

向后工作,我从文档中删除预先选择的行,从最后一行到第一行,不改变单元格的顺序并删除数据,然后从数组中删除最后一个元素并删除下一行。

循环似乎没有完成,我不确定问题出在哪里,它删除了电子表格中的行,但并没有删除所有列出的行,除非我多次运行代码。。。

Logger.log(toBeDeleted);
Logger.log(toBeDeleted.length);
for(var i=0; i<toBeDeleted.length; i++){
rowTBD = toBeDeleted[toBeDeleted.length - 1];
Logger.log(rowTBD);
sheet.deleteRow(rowTBD);
toBeDeleted.splice(-1);
}
Logger.log(toBeDeleted)
Logger.log(toBeDeleted.length)

主要输出

1:15:34 PM  Info    [{}, 1.0, 2.0, 3.0, 5.0, 7.0, 9.0, 11.0, 14.0, 18.0, 35.0, 36.0, 37.0, 39.0, 41.0, 44.0, 46.0, 50.0, 52.0, 66.0, 71.0]
1:15:34 PM  Info    21.0
1:15:34 PM  Info    71.0
1:15:34 PM  Info    66.0
1:15:35 PM  Info    52.0
1:15:35 PM  Info    50.0
1:15:35 PM  Info    46.0
1:15:35 PM  Info    44.0
1:15:35 PM  Info    41.0
1:15:35 PM  Info    39.0
1:15:35 PM  Info    37.0
1:15:36 PM  Info    36.0
1:15:36 PM  Info    35.0
1:15:36 PM  Info    [{}, 1.0, 2.0, 3.0, 5.0, 7.0, 9.0, 11.0, 14.0, 18.0]
1:15:36 PM  Info    10.0

辅助输出:-第二次运行脚本之后

1:16:59 PM  Info    [{}, 1.0, 2.0, 3.0, 5.0, 7.0, 9.0, 11.0, 14.0, 18.0]
1:16:59 PM  Info    10.0
1:16:59 PM  Info    18.0
1:16:59 PM  Info    14.0
1:16:59 PM  Info    11.0
1:16:59 PM  Info    9.0
1:16:59 PM  Info    7.0
1:17:00 PM  Info    [{}, 1.0, 2.0, 3.0, 5.0]
1:17:00 PM  Info    5.0

第三次输出:-第三次运行脚本

1:17:44 PM  Info    [{}, 1.0, 2.0, 3.0, 5.0]
1:17:44 PM  Info    5.0
1:17:44 PM  Info    5.0
1:17:44 PM  Info    3.0
1:17:44 PM  Info    2.0
1:17:45 PM  Info    [{}, 1.0]
1:17:45 PM  Info    2.0

四阶输出-第四次

1:18:37 PM  Info    [{}, 1.0]
1:18:37 PM  Info    2.0
1:18:37 PM  Info    1.0
1:18:37 PM  Info    [{}]
1:18:37 PM  Info    1.0

这是因为随着循环的进行,i的值会增加,toBeDeleted.length的值会减少。这种情况一直持续到i的值等于或大于toBeDeleted.length示例:

迭代次数005114223332

问题:

这是因为toBeDeleted.length在每次迭代中都会被修改。因此,条件i<toBeDeleted.length比预期更早地失败。

解决方案:

toBeDeleted.length设置为变量并使用存储的长度。

代码段:

const storedLength = toBeDeleted.length;
for(let i = 0; i < /*toBeDeleted.length*/storedLength; i++){

使用删除计数器递增数据时进行删除

function deletenonuniquewhileincrementingthroughdata() {
const ss = SpreadsheetApp.getActive();
const id = ss.getId();
const sh = ss.getSheetByName('Sheet0');
const rg = "Sheet0!A2:J" + String(sh.getLastRow());
const vs = Sheets.Spreadsheets.Values.get(id, rg).values;
//Logger.log(JSON.stringify(vs));
let d = 0;
for(let i = 0;i < vs.length; i++) {
for(let j = 0;j<vs[i].length;j++) {
let r = vs[i].slice();
r.splice(j,1)
let idx = r.indexOf(vs[i][j]);
if(idx > -1) {
sh.deleteRow(i + 2 - d++);//delete rows that don't have unique elements
break;
}
}
}
}

之前的第0张

COL1COL8COL9COL10
1910
0312
15118
1332
81811
956
8412
8217
121616

相关内容

最新更新