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;
}