提问人:FeDude 提问时间:10/27/2023 更新时间:10/27/2023 访问量:19
Google 表格在映射数组中插入一行
Google sheets insert a row into a mapped array
问:
我有一个谷歌表格,其中包含一个例程,可以使用另一个工作表中的数据更新主表。主工作表的名称在第 1 列中,数据在相邻的 18 列中。主工作表按名称排序。
使用谷歌脚本,我将主数据映射到一个数组中,然后逐行读取每周工作表并更新主数据(如有必要)。完成后,应该更新主表,因为它已映射到已更新的数组。
每周,我想用每周结果更新主表。
这是我的问题:我可能会在周表中遇到另一个在母版中找不到的名字。在这种情况下,我需要在主数组中创建一个新行(保持字母顺序)
我已经研究过推送,但我不知道如何按字母顺序排列。或者,我可以将其添加到末尾,然后对数组进行排序,但我不确定映射将如何工作。
如果能提供一些指导,将不胜感激。
function updateRinger() {
var WEEKLYPOINTER = 1;
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();
var best = ss.getSheetByName("Ringer");
var name = ss.getSheetByName("Info");
var sheetNameFromUser = name.getRange("A1").getValue();
var latest = ss.getSheetByName(sheetNameFromUser);
var ringer = best.getRange(2,1,best.getLastRow(),best.getLastColumn()-1).getValues();
var weekly = latest.getRange(1,1,latest.getLastRow(),latest.getLastColumn()).getValues();
//Load the best ringer scores into an array and update them if necessary
var updates = ringer.map(updateScores);
//Replace the best scores spreadsheet from the array
ringer = best.getRange(2,1,best.getLastRow(),best.getLastColumn()-1).setValues(updates);
function updateScores(player){
//
//Compare the weekly extract against the best scores for every member and every hole
//
//First - Loop through the weekly extract and compare names against the "best scores"
for (i=WEEKLYPOINTER; i<weekly.length; i++){
if (weekly[i][0] == player[0] ){ //Found a name match
//Now compare all 18 holes for a new lower score
for (j=1; j<19; j++){
if((player[j] > weekly[i][j]) || (player[j] === "")){ // Found a new "lowest score"
//Update the best score for that player
Logger.log("Update Needed: " + player[0] + " Hole: "+ j + " Old Score: "+player[j] + " New Score: " + weekly[i][j]);
player[j] = weekly[i][j];
}
}
return player; //Players stats were updated
}
}
return player; //No Update this week
}
答: 暂无答案
评论
=Sort(Unique(filter(A:A,A:A<>"")))