Google Script与Google Sheets侧边栏下拉匹配单元格添加数值求助
实现方案
一、修改 Google Apps Script 代码
替换你现有的gs文件内容为以下代码:
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"); // 如果球员姓名从第二行开始(第一行A列是表头),把下方的1改成2即可 return sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues().flat(); } // 获取统计类型列表(从第一行表头拉取) function getStatTypes() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Football"); return sheet.getRange(1, 2, 1, sheet.getLastColumn()-1).getValues().flat(); } // 累加数值到目标单元格 function enterValue(playerName, statType, inputNumber) { var ss = SpreadsheetApp.getActive(); var sheet = ss.getSheetByName("Football"); var allNames = getNames(); var allStats = getStatTypes(); // 匹配球员对应行号 var rowIndex = allNames.indexOf(playerName) + 1; // 匹配统计项对应列号,跳过A列所以+2 var colIndex = allStats.indexOf(statType) + 2; if (rowIndex < 1 || colIndex < 2) return; // 匹配失败直接返回 // 读取原有数值,空值默认0 var originValue = Number(sheet.getRange(rowIndex, colIndex).getValue() || 0); var addValue = Number(inputNumber || 0); // 累加后写入 sheet.getRange(rowIndex, colIndex).setValue(originValue + addValue); }
二、修改侧边栏HTML代码
替换你现有HTML文件内容为以下代码:
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <!-- 球员选择下拉 --> <label>选择球员:</label> <select id="playerSelect"></select> <br><br> <!-- 统计类型选择下拉 --> <label>选择统计类型:</label> <select id="statSelect"></select> <br><br> <!-- 数值输入框 --> <label>输入数值:</label> <input type="number" id="numberInput" min="0" value="1"> <br><br> <!-- 提交按钮 --> <button onclick="sendValue()">确认录入</button> <script> // 加载球员列表到下拉框 function loadPlayerNames(names) { var select = document.getElementById("playerSelect"); names.forEach(name => { var option = document.createElement("option"); option.text = name; select.add(option); }); } // 加载统计类型到下拉框 function loadStatTypes(stats) { var select = document.getElementById("statSelect"); stats.forEach(stat => { var option = document.createElement("option"); option.text = stat; select.add(option); }); } // 页面加载完成后拉取两个下拉的选项 window.onload = function() { google.script.run.withSuccessHandler(loadPlayerNames).getNames(); google.script.run.withSuccessHandler(loadStatTypes).getStatTypes(); } // 提交数据到后台 function sendValue(){ var selectedPlayer = document.getElementById("playerSelect").value; var selectedStat = document.getElementById("statSelect").value; var inputNum = document.getElementById("numberInput").value; google.script.run.enterValue(selectedPlayer, selectedStat, inputNum); // 录入后默认重置为1,方便快速高频录入 document.getElementById("numberInput").value = 1; } </script> </body> </html>
三、使用注意事项
- 请确保你的
Football工作表结构符合要求:第一列为球员姓名,第一行表头为统计类型名称(冲球、传球等),不要在A列和第一行插入无关内容 - 录入数值支持正负值,也可以直接修改输入框的默认值适配常用录入场景
内容的提问来源于stack exchange,提问作者Andrew Dunn
相关产品推荐
相关产品推荐

