gpt4 book ai didi

javascript - 如何将重复的单元格与谷歌应用程序脚本合并在一起?

转载 作者:太空宇宙 更新时间:2023-11-04 15:30:32 25 4
gpt4 key购买 nike

我目前有一个包含两列的列表。第一列是学生姓名,第二列是他们的分数。

我从多个电子表格导入了此列表,因此学生姓名中有很多重复项。我可以删除重复项,但我想记录它们的总点数。例如:

艾米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 分钟最大执行时间。还有其他更有效的方法来实现我的目标吗?

最佳答案

您的代码运行缓慢,因为 Spreadsheets API 方法(如 getRange)非常耗时,并且比其他 JavaScript 代码慢得多。

这里是优化的函数,减少了此类电子表格 API 调用的数量:

function calcNumbers()
{
var target = SpreadsheetApp.getActiveSpreadsheet();
var sheet = target.getSheetByName("Sheet2");
var lastRow = sheet.getLastRow();
var dataRange = sheet.getRange(2, 1, lastRow-1, 2);
var data = dataRange.getValues();
var pointsByName = {};

for (var i = 0; i < data.length; i++)
{
var row = data[i];
var curName = row[0];
var curNumber = row[1];

// empty name
if (!curName.trim())
{
continue;
}

// if name found first time, save it to object
if (!pointsByName[curName])
{
pointsByName[curName] = Number(curNumber);
}
// if duplicate, sum numbers
else
{
pointsByName[curName] += curNumber;
}
}

// prepare data for output
var outputData = Object.keys(pointsByName).map(function(name){
return [name, pointsByName[name]];
});

// clear old data
dataRange.clearContent();

// write calculated data
var newDataRange = sheet.getRange(2, 1, outputData.length, 2);
newDataRange.setValues(outputData);
}

关于javascript - 如何将重复的单元格与谷歌应用程序脚本合并在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44827397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com