我每天运行两次以下代码来清理一些从 API 导入的数据。我只需要它来删除重复的行,因为数据有时是重复的并且非常长。一个大问题是,它将在一年内每天收集 4 列数据,超过 2300 行,因此将达到大约 840,000 行,并且在某个时候接近 400 万个单元格。仅仅大约一周的数据就已经超时了。我最初将其作为主代码的一部分(正如您在示例表中看到的那样),但现在我已将其移至客户表中自己的函数中。尽管如此,它运行的时间还是太长了(上次执行时间为 316 秒,非常接近超时)。关于如何加快速度有什么建议吗? 这是代码:
function removeDupes(){
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('Imported Data');
var dataSheet = ss.getSheetByName('Trimmed Data');
var data = dataSheet.getDataRange().getValues();
var newData = [];
for (var i in data) {
var row = data[i];
var duplicate = false;
for (var j in newData) {
if (row.join() == newData[j].join()) {
duplicate = true;
}
}
if (!duplicate) {
newData.push(row);
}
}
dataSheet.clearContents();
dataSheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
dataSheet.hideSheet();
}
这是我的工作表副本(其中代码是“callAPI”函数的一部分):https://docs.google.com/spreadsheets/d/1lyFa8goXC5zy_iY2U04E6bXbQz2aLSFd0z9b87l_gO4/edit?usp=sharing
我已经搜索了一段时间,以找到更快的重复可移动代码示例,但这一个是我发现的最好的,但仍然不够快。
谢谢!
最佳答案
我相信您的目标如下。
- 您想要通过使用 Google Apps 脚本检查“A”和“B”列来删除重复的行。
- 您希望降低脚本的处理成本。
为了达到你的目的,在这个答案中,我想建议使用removeDuplicates
的方法。当这反射(reflect)到您的脚本中时,它会变成如下所示。
修改后的脚本:
function removeDupes() {
SpreadsheetApp
.getActive()
.getSheetByName('Trimmed Data')
.getDataRange()
.removeDuplicates([1, 2]);
}
引用:
关于google-apps-script - 谷歌脚本超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64777655/