Google apps script 根据输入的标准显示过滤的游戏列表的脚本?(谷歌电子表格

Google apps script 根据输入的标准显示过滤的游戏列表的脚本?(谷歌电子表格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,如果我的措辞令人困惑,我深表歉意,因为我对脚本和编程还不熟悉。我和我的朋友有一份棋盘游戏列表,其中有我们拥有的游戏列表、玩游戏所需的估计时间以及玩游戏所需的最小/最大玩家数。我创建了一个表格,希望能够在其中输入我必须输入的玩家数玩游戏,以及我们必须玩的时间。然后,当我单击一个按钮运行脚本时,它将显示符合我的标准的所有可用游戏。我有一个公式,我在创建过程中得到了帮助,但希望获得更多关于如何正确执行此操作的指导 以上是相关电子表格的副本,代码如下所示: /** @OnlyCurrentDoc */

如果我的措辞令人困惑,我深表歉意,因为我对脚本和编程还不熟悉。我和我的朋友有一份棋盘游戏列表,其中有我们拥有的游戏列表、玩游戏所需的估计时间以及玩游戏所需的最小/最大玩家数。我创建了一个表格,希望能够在其中输入我必须输入的玩家数玩游戏,以及我们必须玩的时间。然后,当我单击一个按钮运行脚本时,它将显示符合我的标准的所有可用游戏。我有一个公式,我在创建过程中得到了帮助,但希望获得更多关于如何正确执行此操作的指导

以上是相关电子表格的副本,代码如下所示:

/** @OnlyCurrentDoc */

function test() {
  var gamesThatFitCriteria = findGames(4,50);
}

function findGames(player, timeInMinutes) {
  var games = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  games.shift(); //Remove first row
  games.shift(); //Remove second row

  var result = [];

  for (var i=0; i<games.length; i++) {
    var currentGame = games[i];

    var time = currentGame[2];
    var minPlayer = currentGame[3];
    var maxPlayer = currentGame[4];

    if (time<=timeInMinutes && player >= minPlayer && player <= maxPlayer) {
      //Eligible Game
      result.push(currentGame);
    }
  }
  return result;
}
/**@仅限当前文档*/
功能测试(){
var gamesThatFitCriteria=findGames(4,50);
}
函数findGames(播放器,时间分钟){
var games=SpreadsheetApp.getActiveSheet().getDataRange().getValues();
games.shift();//删除第一行
games.shift();//删除第二行
var结果=[];

对于(var i=0;i这将为您提供一个对话框来查看所有结果

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 = [];

  for (var i=0;i<values.length;i++) {
    var currentGame = values[i];

    var time = currentGame[2];
    var minPlayer = currentGame[3];
    var maxPlayer = currentGame[4];

    if (time<=timeInMinutes && player >= minPlayer && player <= maxPlayer) {
      result.push(currentGame);
    }
  }
  return result;
}
函数runThis(){
var gamesThatFitCriteria=findGames(4,50);
var userInterface=HtmlService.createHtmlOutput(gamesThatFitCriteria.join(“
”); SpreadsheetApp.getUi().showModelessDialog(用户界面,“游戏”) } 函数findGames(播放器,时间分钟){ var games=SpreadsheetApp.getActive(); var sh=games.getActiveSheet(); var rg=sh.getRange(3,1,sh.getLastRow(),sh.getLastColumn()); var values=rg.getValues(); var结果=[];
对于(var i=0;i谢谢你!我已将runThis函数分配给工作表上的一个按钮。我如何将单元格连接到脚本?例如,我希望有一个单元格可以输入我有多少玩家,另一个单元格可以输入我有多少时间。(也许你已经为我这样做了,但我对脚本非常陌生,所以我道歉)我还有一个问题,是否可以将此按钮放在单独的工作表上?它似乎只有在我将脚本分配给“当前”工作表上的按钮时才起作用。我只需从类似于
function onOpen(){SpreadsheetApp.getUi().createMenu('My menu').addItem('Launch Get Games Dialog','runOne').addToUi();}的菜单运行该函数
如果您已经为此项目创建了菜单,则只需将其添加到该菜单中即可。
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;
}
function runOne() {
  var html='<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"><script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>';
  html+='<input type="text" id="player" placeholder="Players" /><br /><input type="text" id="time" placeholder="Time in minutes"><br /><input type="button" value="Get Games" onClick="getGames();" /><br /><div id="result"></div><div id="hidden" style="display:none;"><br /><select id="sel1"  class="control" style="width:150px;height:35px;margin:5px 0 5px 0;"><option value="" selected></option></select></div>';
  html+='<script>function getSelection(){var selection=document.getElementById("sel1").value;console.log("I am here");google.script.run.withSuccessHandler(function(r){google.script.host.close();}).getSelection(selection);}function getGames(){var players=document.getElementById("player").value;var minutes=document.getElementById("time").value;google.script.run.withSuccessHandler(function(rObj){updateSelect(rObj.games);document.getElementById("sel1").addEventListener("change", getSelection);$("#hidden").css("display","block");}).findGames(players,minutes);}function updateSelect(vA,id){var id=id ||"sel1";var select=document.getElementById(id);select.options.length = 0;for(var i=0;i<vA.length;i++){select.options[i]=new Option(vA[i],vA[i]);}}console.log("My Code");</script>';
  var userInterface=HtmlService.createHtmlOutput(html).setWidth(800);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "Find 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 = ['Select a game'];
  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);}});
  var rObj={games:result};
  return rObj;
}

function getSelection(selection) {
  var msg=Utilities.formatString('You have selected: %s',selection);
  SpreadsheetApp.getUi().alert(msg);
  //you can put selection any where you want with setValue()
  return true;
}