[英]Issues getting google sheets script to repeat for multiple data and then clear cells
这是我在下面提到的示例表。
我的工作表旨在跟踪人们在比赛中的技能水平变化。 我的表格“团队选择器”允许您指定每个团队的成员并输入分数,它会在 P 列中更新技能等级 (ELO)。
我已经设置了一个按钮,该按钮目前可以为 G4 的玩家提交我想要的所有数据。 我无法弄清楚如何重复此操作以提交任何其他选定玩家的数据。 由于团队中并不总是有 6 人,因此理想情况下,我还希望脚本能够识别是否没有输入数据,这样它就不会复制空白值。
然后我想清除 G4:G9、G15:G20 和 M11:M12 之间的值,并将单元格 M2 的值增加 1。最简单的方法是什么?
在这种情况下,我建议创建配置变量来存储对单元格的引用。 这样,基于电子表格结构扩展或修改脚本行为会更容易。 使用 Javascript object 非常容易为每个团队创建配置变量。
var team1 = {start: 4, end: 9, player: "G", oldElo: "H", newElo: "P", result: "N11"};
var team2 = {start: 15, end: 20, player: "G", oldElo: "H", newElo: "P", result: "N12"};
这样,您在构建导出逻辑时就不必担心单元格引用。
现在您应该继续导出所需的信息。 由于团队的结构几乎相同,我建议构建另一个 function ,它将返回一个包含提取信息的数组:
function fillTeamRows(ss, team) {
// These are general configuration variables that are the same for every team.
var match = "M2";
var date = "M5";
var scoreboard1 = "M11";
var scoreboard2 = "M12";
// Here i declare an empty array that I will fill according to the export logic
var teamRows = [];
var i;
for (i=team.start; i<= team.end; i++) { // I will loop through the team range to build my export
if (!ss.getRange(`${team.player}${i}`).getValue() == "") { // If there is no player in this row, skip it.
var playerRow = [];
playerRow.push(ss.getRange(match).getValue());
playerRow.push(ss.getRange(`${team.player}${i}`).getValue());
playerRow.push(ss.getRange(date).getValue());
playerRow.push(ss.getRange(team.result).getValue());
playerRow.push(ss.getRange(`${team.oldElo}${i}`).getValue());
playerRow.push(ss.getRange(`${team.newElo}${i}`).getValue());
playerRow.push(ss.getRange(scoreboard1).getValue());
playerRow.push(ss.getRange(scoreboard2).getValue());
teamRows.push(playerRow); // Add the player row to the team array.
// Now you can clear the information about the player
ss.getRange(`${team.player}${i}`).clear();
}
}
return teamRows;
}
现在我将使用这个 function 为两个团队构建导出并将数据导出到
let team1Rows = fillTeamRows(formSS, team1);
let team2Rows = fillTeamRows(formSS, team2);
// Now it's a good moment to clear the scoreboard and increment the match counter.
formSS.getRange("M11:M12").clear(); //clear
formSS.getRange("M2").setValue(1 +formSS.getRange("M2").getValue()); //increment
//Input Values
var values = [...team1Rows,...team2Rows];
datasheet.getRange(datasheet.getLastRow()+1, 1, values.length, 8).setValues(values);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.