我的循环没有按预期运行,我真的很难解决问题,因为它似乎在工作,我必须手动重复脚本才能完成任务。。。
向后工作,我从文档中删除预先选择的行,从最后一行到第一行,不改变单元格的顺序并删除数据,然后从数组中删除最后一个元素并删除下一行。
循环似乎没有完成,我不确定问题出在哪里,它删除了电子表格中的行,但并没有删除所有列出的行,除非我多次运行代码。。。
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示例:
迭代次数问题:
这是因为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张
COL1 | COL8 | COL9 | COL10 | |
---|---|---|---|---|
1 | 9 | 10 | ||
0 | 3 | 12 | ||
15 | 11 | 8 | ||
13 | 3 | 2 | ||
8 | 18 | 11 | ||
9 | 5 | 6 | ||
8 | 4 | 12 | ||
8 | 2 | 17 | ||
12 | 16 | 16 |