Вычисление баллов в электронной таблице с помощью Google App Script

#javascript #google-apps-script #google-sheets

#javascript #google-apps-script #google-таблицы

Вопрос:

Итак, после нескольких часов исследований и просмотра этих ссылок мне удалось объявить только некоторые переменные и создать цикл for без чего-либо внутри. Я не могу понять, что мне нужно туда добавить, и я даже не уверен, что все эти переменные практичны. Излишне говорить, что у меня почти нет опыта работы с JavaScript. Я хорошо разбираюсь только в использовании функций электронных таблиц и дизайне электронных таблиц :/

Вот ссылка на электронную таблицу: https://docs.google.com/spreadsheets/d/1G55twwouyvv8G24M89OYHsVBFrceipXdE9hIGgTS5-E/edit?usp=sharing
Не стесняйтесь создавать копию и проверять код в редакторе сценариев. Конечно, я также добавлю свой код в конце этого поста.

Итак, какова цель этой таблицы?

  • Он отслеживает, как долго игроки в онлайн-игре участвовали в предприятии.
  • Вы можете увидеть на листе две команды игроков (Эскорт и майнеры) с указанием продолжительности, чтобы определить, как долго они участвовали в предприятии. Столбец «Заработная плата» для команды сопровождения не имеет отношения к моему вопросу здесь.
  • Важным для этого листа является то, что столбцы «ИМЯ», «ОТ» и «ДО» сбрасываются после каждого предприятия!
    Для этого и предназначена желтая кнопка.
  • Рядом с командами есть таблица «Оценки», которая должна содержать текущий счет для игроков.
    Игроки получают оценку в зависимости от продолжительности участия.
  • Прямо сейчас в столбце «Оценка» отображается только текущая продолжительность, но при нажатии кнопки сброса оценки также сбрасываются. Кроме того, поиск проверяет только команду сопровождения, потому что в то время я не беспокоился, так как у меня это все равно не работает.

Что я хочу, чтобы кнопка оценки делала!

  • Если кнопка нажата, она должна найти текущую продолжительность для каждого игрока в обеих командах и добавить значение в соответствующие ячейки в разделе «Оценки». Таким образом, это будет отслеживать все время счет для каждого игрока.
  • Количество участников в каждой команде может отличаться для каждого предприятия.
  • Имена в таблице результатов могут меняться, могут быть добавлены новые или имена могут быть удалены в любое время.
    Никогда не будет тысячи игроков, но пользователь должен иметь право добавлять столько имен, сколько захочет.

Вот что мне удалось придумать до сих пор.
Большая часть этого кода основана на том, что я нашел в этой статье. Я думал, что это довольно точно для того, как я хочу искать данные в своей электронной таблице, но я застрял в вычислении из-за моего отставания в знаниях. Буду признателен за любую помощь, будь то рабочий код или просто подсказки о том, какие функции мне понадобятся для этого.

 function scoreButton() {
  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetTime = ss.getActivesheet();
  
  var rangeEscort = sheetTime.getRange(5, 1, sheetTime.getLastRow()-4, 4);  // range for first team of players
  var rangeMiner = sheetTime.getRange(5, 7, sheetTime.getLastRow()-4, 10);  // range for second team of players
  var rangeScore = sheetTime.getRange(5, 12, sheetTime.getLastRow()-4, 14); // range for the scores
  
  var searchRangeEscort = sheetTime.getRange(5, 5, sheetTime.getLastRow()-5 1, sheetTime.getLastColumn()-5 1);
  var searchRangeMiner = sheetTime.getRange(5, 7, sheetTime.getLastRow()-5 1, sheetTime.getLastColumn()-7 1);
  var searchRangeScore = sheetScore.getRange(5, 12, sheetTime.getLastRow()-5 1, sheetTime.getLastColumn()-12 1);
  
  var rangeValues = searchRangeEscort.getValues();
  for (i = 0; i < lastColumnEscort - 1; i  ){
    for (j = 0; j < lastRowEscort - 1; j  ){
     
    };
  };
};
  

РЕДАКТИРОВАТЬ: обновленный код.

Комментарии:

1. Я предлагаю вам добавить краткое изложение в верхней части вашего вопроса и сделать заголовок более конкретным.

2. var rangeEscort = sheetTime.getDataRange("A5:D"); getDataRange() принимает любые параметры попробуйте sheetTime.getRange(5,1,sheetTme.getLastRow()-4,4) использовать обозначения A1, такие как A5: D часто возвращают нули в конце данных, которые требуют фильтрации. Не рекомендуется использовать их, если вы не можете указать конкретную строку с ними.

3. var searchRangeEscort = sheetTime.getRange(5, 5, lastRowEscort-1, lastColumnEscort-1); должно быть записано следующим образом: sheetTime.getRange(startRow,startColumn,sheetTime.getLastRow()-startRow 1,sheetTime.getLastColumn()-startColumn 1) последние два параметра — это количество строк и количество столбцов.

4. Какие столбцы вы хотите добавить в каждый диапазон?

5. Пожалуйста, обновите свой вопрос до текущего кода