
[英]Google Sheets Apps Script -- select value from cell with multiple lines
[英]Google Script and Google Sheets - Drop down to select cell and add value from input from sidebar
我一直在从其他来源拼凑脚本,感觉自己很接近但无法自己完成最后的飞跃。 只是为了给你一些背景
我正在 Google Sheets 中整理一份文档,我可以让学生输入来自现场足球比赛的特定值,这些值将在 OBS 上用作我们视频广播的实时统计数据。 我为篮球制作了一个非常简单的按钮表,它的效果非常好。 Google 篮球表的图片
足球是一种不同的野兽。 我的概念是有一个侧边栏,在那里我有一组在下拉菜单中预选的名称以及第二个下拉菜单,其中包含预选的统计类型下拉列表(匆忙,传递......)这两个下拉菜单会找到与名称行)和统计类型(列)相关联的单元格以及为选定单元格添加值的输入字段。
我一直无法弄清楚如何将下拉菜单与特定单元格关联,更不用说两个不同的下拉菜单了。 如果这两个下拉菜单是不可能的,我很高兴制作一个按钮来与特定的播放相关联,然后下拉名称和输入字段就可以了。
到目前为止我所拥有的 - 我有一个下拉菜单,可以从 A 列中提取名称,但是当我选择一个时,什么也没有发生。 我还有一个按钮,我可以将一个值发送到特定的单元格,但它不会添加到原始单元格,它只是将单元格更改为“输入值”1
function ftball() { try { var output = HtmlService.createHtmlOutputFromFile('HTML_Sidebar'); SpreadsheetApp.getUi().showSidebar(output); } catch(err) { Logger.log(err); } } function getNames() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Football"); return sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues(); // Retrieve values and send to Javascript } // Sets the value of A1 cell to value entered in the input field in the side bar! function enterValue(number){ var ss = SpreadsheetApp.getActive() var sheet = ss.getActiveSheet() sheet.getRange("B11").setValue(number + 1) }
和侧边栏的 HTML
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <select id="mySelect" onchange="selectChange(this)"> </select> <script> function selectChange(select) { google.script.run.changeSheet(select.value); } function playerNames(names) { var select = document.getElementById("mySelect"); for( var i=0; i<names.length; i++ ) { var option = document.createElement("option"); option.text = names[i]; select.add(option); } } (function () { google.script.run.withSuccessHandler(playerNames).getNames(); }()); </script> <button onclick='f1()'>Select Athlete Name</button> </br> <!-- Create a input field to except a value form user, in this case there name --> Enter Value: <input type="number" id="number"><br> <!-- Create a button to send the value to the spreadsheet --> <button onclick='sendValue()'>Send Value</button> <script> function f1() { google.script.run.getAddress(); } function sendValue(){ //Get the value of the input field var number = document.getElementById("number").value //Log the value of input field in the web browser console (usually used for debugging) console.log(number) //Send the value of the text field as a arugment to the server side function. google.script.run.enterValue(number) } </script> </body> </html>
我可以使用我自己的示例数据从您的数据中创建一些内容,但不确定这是否是您想要的,但我尝试根据我在您的帖子中理解的内容进行调整。 请参阅下面的输出和代码。
function ftball() {
try {
var output = HtmlService.createHtmlOutputFromFile('HTML_Sidebar');
SpreadsheetApp.getUi().showSidebar(output);
}
catch(err) {
Logger.log(err);
}
}
function getData() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Football");
return [sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues().filter(String), // Retrieve names and
sheet.getRange(1, 2, sheet.getLastRow(), 1).getValues().filter(String)]; // Stat types then send to Javascript (remove blank cells)
}
function enterValue(number, name, stat){
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var namesLength = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues().filter(String).length;
var statsLength = sheet.getRange(1, 2, sheet.getLastRow(), 1).getValues().filter(String).length;
// where your name headers for the table starts (C6)
var nameStartRow = 6;
var nameStartCol = 3;
// where your stat headers for the table (D5)
var statStartRow = 5;
var statStartCol = 4;
// get list of names
var names = sheet.getRange(nameStartRow, nameStartCol, namesLength, 1).getValues().flat();
var stats = sheet.getRange(statStartRow, statStartCol, 1, statsLength).getValues().flat();
// find the position by adjusting the index of name/stat to where the list starts
var namePosition = names.indexOf(name) + nameStartRow;
var statPosition = stats.indexOf(stat) + statStartCol;
// get previous value, assign 0 if blank.
var previousValue = sheet.getRange(namePosition, statPosition).getValue() || 0;
sheet.getRange(namePosition, statPosition).setValue(parseInt(previousValue) + parseInt(number));
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<select id="mySelectNames"></select>
<select id="mySelectStats"></select><br>
Enter Value:
<input type="number" id="number"><br>
<button onclick='sendValue()'>Send Value</button>
<script>
function setOptions([names, stats]) {
// set both names and stats drop down
var select = document.getElementById("mySelectNames");
for( var i=0; i<names.length; i++ ) {
var option = document.createElement("option");
option.text = names[i];
select.add(option);
}
// set default value to first option
select.selectedIndex = 0;
var select2 = document.getElementById("mySelectStats");
for( var i=0; i<stats.length; i++ ) {
var option2 = document.createElement("option");
option2.text = stats[i];
select2.add(option2);
}
select2.selectedIndex = 0;
}
function sendValue(){
// send the values of name, stat and number then set as value
var number = document.getElementById("number").value;
var name = document.getElementById("mySelectNames").value;
var stat = document.getElementById("mySelectStats").value;
//Send the value of the text field as a arugment to the server side function.
google.script.run.enterValue(number, name, stat);
}
(function () { google.script.run.withSuccessHandler(setOptions).getData(); }());
</script>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.