Подход
В подобных случаях я бы рекомендовал создать переменные конфигурации, которые будут хранить ссылку на ваши ячейки. Таким образом будет проще расширить или изменить поведение скрипта на основе структуры электронной таблицы. Используя объект Javascript, действительно легко создать переменную конфигурации для каждой команды.
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"};
Таким образом, вам не нужно беспокоиться о ссылках на ячейки при построении журнала экспорта c.
Теперь следует приступить к экспорту необходимой информации. Поскольку структура команды почти такая же, я бы предложил создать другую функцию, которая будет возвращать массив с извлеченной информацией:
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;
}
Теперь я бы использовал эту функцию для создания экспорта для двух команд. и экспортировать данные на
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);