【发布时间】:2019-03-13 02:31:30
【问题描述】:
当我在工作表中运行以下函数时:
function removeDuplicateRows() {
var sheet = SpreadsheetApp.getActiveSheet();
var column = sheet.getRange('D580:D');
var data= column.getValues();
var newData = new Array();
for(i in data){
var row = data[i];
var duplicate = false;
for(j in newData){
if(row.join() == newData[j].join()){
duplicate = true;
}
}
if(!duplicate){
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
什么也没发生,只是超时。当我确定范围时,这似乎是由于我的“列”变量。如果我将其留空,它会运行,但我不希望它到达前 580 行。有人知道为什么会这样吗?
感谢您的帮助,
【问题讨论】:
-
查看您的算法。双重嵌套
for不好。尤其是当您缺少短路逻辑步骤时,例如一旦您知道有重复就停止内部循环。但是,有比将事物存储在数组中并每次都遍历该数组更好的方法。查看我关于重复检测的一些答案。 -
PS:这段代码 sn-p 不可能删除行 - 你永远不会调用
Sheet#deleteRow -
它适用于我的测试电子表格(数据较少)。我没有放入 Sheet#deleterow?
标签: google-apps-script google-sheets