Проблемы с повторением скрипта таблиц Google для нескольких данных с последующей очисткой ячеек - PullRequest
0 голосов
/ 14 июля 2020

Это мой Пример листа , на который я ссылаюсь ниже.

Моя таблица предназначена для отслеживания изменений уровня навыков в игре, когда люди играют друг против друга. Моя таблица «Выбор команды» позволяет вам указать, кто был в каждой команде, и ввести счет, и он выведет обновленный рейтинг навыков (ELO) в столбце P.

Я установил кнопку, которая в настоящее время работает чтобы отправить все данные, которые я хочу для игрока в G4. Я не смог придумать, как повторить это, чтобы отправить данные для любых других выбранных игроков. Поскольку в команде не всегда 6 человек, я также в идеале хотел бы, чтобы сценарий распознавал, если данные не были введены, чтобы он не копировал пустые значения.

Затем я хотел бы очистить значения между G4: G9, G15: G20 и M11: M12 и увеличьте значение ячейки M2 на 1. Как проще всего это сделать?

1 Ответ

0 голосов
/ 14 июля 2020

Подход

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