Скрипт для отображения матчей настольной игры на основе критериев - PullRequest
1 голос
/ 23 октября 2019

Мои извинения, если моя формулировка сбивает с толку, так как я новичок в написании сценариев и программировании. У меня есть список настольных игр с моими друзьями, у которых есть список игр, которыми мы владеем, примерное время, необходимое для игры, и минимальное / максимальное количество игроков, необходимое для игры. Замечательный член сообщества создал сценарий, в котором я могу указать количество игроков, которых у меня есть, и количество времени, которое у нас есть на руках, и сценарий будет перечислять доступные игры, которые мы могли бы использовать в качестве основы для моего ввода. В настоящее время я вписываю игроков и время в строке два скрипта (var gamesThatFitCriteria = findGames (4,50);). Я хотел бы, чтобы скрипт взял значения обозначенных двух ячеек на листе для создания этих чисел.

Вот лист (редактируемый для всех, у меня есть отдельная личная копия) с подробной информацией о том, что я хотел бы выполнить, а также мой текущий сценарий.

https://docs.google.com/spreadsheets/d/1AFTr_ji5iz8BJU9_OkZ1Xhfb9hg9ARAaRXfdVx2Y8pU/edit?usp=sharing

function runThis() {
  var gamesThatFitCriteria = findGames(4,50);
  var userInterface=HtmlService.createHtmlOutput(gamesThatFitCriteria.join('<br />'));
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "Games")
}

function findGames(player, timeInMinutes) {
  var games=SpreadsheetApp.getActive();
  var sh=games.getActiveSheet();
  var rg=sh.getRange(3,1,sh.getLastRow(),sh.getLastColumn());
  var values=rg.getValues();
  var result = [];
  values.forEach(function(r){var name=r[0];var time=r[2];var minPlayer=r[3];var maxPlayer=r[4];if(time<=timeInMinutes && player >= minPlayer && player <= maxPlayer) {result.push(name);}});
  return result;
}

1 Ответ

0 голосов
/ 24 октября 2019
  • Вы хотите получить значения из ячеек B2:B3 на листе Look Here.
  • . Вы хотите использовать полученные значения для valueOfB2 и valueOfB3 из * 1008. *.
  • Вы хотите добиться этого, изменив свой скрипт.

Если мое понимание верно, как насчет этой модификации?

Модифицированный скрипт:

Когда ваш сценарий изменяется, измените функцию runThis() следующим образом.

function runThis() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Look Here");
  var [[valueOfB2], [valueOfB3]] = sheet.getRange("B2:B3").getValues();
  var gamesThatFitCriteria = findGames(valueOfB2, valueOfB3);
  var userInterface=HtmlService.createHtmlOutput(gamesThatFitCriteria.join('<br />'));
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "Games")
}

Примечание:

  • В вашей общей электронной таблице есть 2 функции:findGames в файлах Get Games Dialogue и On Open. В этом случае запускается одна из 2 функций findGames. Поэтому будьте осторожны с этим.
  • В вашем скрипте, когда вы запускаете функцию runThis на листе Games, отображаются восстановленные значения. При запуске функции на листе Look Here значения не отображаются. Пожалуйста, будьте осторожны с этим.
    • Если вы хотите отобразить значения на листе Look Here, измените var sh=games.getActiveSheet(); на var sh=games.getSheetByName("Games");.

Ссылка:

Если я неправильно понял ваш вопрос и это не тот результат, который вам нужен, я приношу свои извинения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...