【发布时间】:2017-06-29 14:04:45
【问题描述】:
我目前有一个包含两列的列表。第一列是学生姓名,第二列是他们的分数。
我从多个电子表格中导入了这个列表,所以学生的名字有很多重复。我可以删除重复项,但我想记录他们拥有的总分。例如:
艾米 10 鲍勃 9 卡罗尔 15 艾米 12
会变成:
艾米 22 鲍勃 9 卡罗尔 15
这是我目前所拥有的:
var target = SpreadsheetApp.getActiveSpreadsheet();
var sheet = target.getSheetByName("Sheet2");
var data = sheet.getRange("A2:B1000").getValues();
var newData = new Array();
var k = 0
var finallist = []
for(i in data){
k++;
var row = data[i];
var duplicate = false;
for(j in newData){
if(row[0] == newData[j][0]){
duplicate = true;
var storedHour = sheet.getRange("B"+k).getValue();
var position = finallist.indexOf(row[0]);
var originalCell = sheet.getRange("B"+(position+1));
var originalHour = originalCell.getValue();
originalCell.setValue(originalHour + storedHour);
sheet.getRange(k,2).setValue("")
sheet.getRange(k,1).setValue("")
}
}
if(!duplicate){
newData.push(row);
finallist.push(row[0])
}
}
}
我遇到的问题是我们有一个非常大的数据样本,我担心它可能会超过 Google 的 5 分钟最长执行时间。还有其他更有效的方法来实现我的目标吗?
【问题讨论】:
-
您好,Qilin,有什么不符合您的预期?你遇到了什么问题?
-
对不起,我忘了把实际问题放在描述中!多么粗心。我只是想知道如何使代码更高效,因为我想在 Google 的 5 分钟最大执行时间下执行它。我现在将其添加到说明中。
-
哈哈,轻松搞定,不用担心。我对 Google Scripts 了解不多,但我觉得像 MapReduce 之类的东西或将任务拆分为单独的作业可能会奏效。
-
我猜你是对的。如果超出限制,我可以将任务分成两半。谢谢!
-
你在单元格中尝试过 =query() 吗?我想说的是,如果您选择正确的语句,那可以得到您想要的结果,但我从未在查询中使用过分组。
标签: javascript google-apps-script spreadsheet