html - Google 表格边栏/脚本 - 使用下拉菜单从范围中选择值,然后在同一行中输入值
问题描述
我有一个用于跟踪校对工作的 Google 表格工作簿。有一个状态表,它使用查询从作业日志表中提取有关活动作业的信息,然后进行一些计算以显示我的进度。
我创建了一个自定义侧边栏以按优先级(B 列)选择一行,然后轻松输入阅读的页数(I 列)和花费的分钟数(L 列),但我不知道如何将新值应用于工作表. 我还想修改侧边栏以从下拉列表中选择优先级(B 列),而不是输入值。
这是我为 UpdateSidebar.html 提供的内容:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body bgcolor="#039EB2">
<font face="arial" color="white">
<b>Select a job by Priority and enter the updated values to apply.</b><br><br>
<!-- Create input fields to accept values from the user -->
Job Priority:<br>
<input type="text" id="Priority"><br><br>
<!-- I would like this to be a dropdown with values from B13:B instead of text input -->
Pages Read:<br>
<input type="text" id="Pages"><br><br>
Minutes Spent:<br>
<input type="text" id="Minutes"><br><br>
<!-- Create a button to update values -->
<button onclick='saveUpdate()'>Update Job Status</button><br><br><br>
<script>
function saveUpdate() {
//Get the value of the input fields
var priority = document.getElementById("Priority").value
var pages = document.getElementById("Pages").value
var minutes = document.getElementById("Minutes").value
//Log the value of input fields in the web browser console (usually used for debugging)
console.log(priority, pages, minutes)
//Send the values as arugments to the server side function
google.script.run.applyName(priority, pages, minutes)
}
</script>
</font>
</body>
</html>
这是我当前的代码:
function showSidebar() {
var html = HtmlService
.createHtmlOutputFromFile('UpdateSidebar')
.setTitle('Status Update Sidebar')
.setWidth(200);
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.showSidebar(html);
}
function applyName(priority, pages, minutes){
var ss = SpreadsheetApp.getActive()
var sheetStatus = ss.getSheetByName("Status")
var sheetLog = ss.getSheetByName("Job Log")
<!-- //Whatever needs to happen to:
//Select row with priority in Column B
//Apply pages to Column I
//Apply minutes to Column L -->
}
我对 Google 表格中的编码相当陌生,因此我将不胜感激。谢谢!
解决方案
如何将从侧边栏中选出的值输入到工作表的选定行中?
修改您的功能applyName
如下:
function applyName(priority, pages, minutes){
var ss = SpreadsheetApp.getActive()
var sheetStatus = ss.getSheetByName("Status")
var sheetLog = ss.getSheetByName("Job Log")
//Whatever needs to happen to:
//Select row with priority in Column B
// the following line selects a static range, it can be modifed to a dynamic one if necessary
var firstRow = 14;
var lastRow = 18;
var columnBvalues = sheetStatus.getRange(firstRow, 2, lastRow-firstRow+1, 1).getValues();
var valueArray = columnBvalues.map(function(column){
return column[0].toString();
});
var position = valueArray.indexOf(priority);
Logger.log(valueArray);
Logger.log(position);
if (position > - 1){
var selectedRow = firstRow + position;
//Apply pages to Column I = Column 9
sheetStatus.getRange(selectedRow, 9).setValue(pages);
//Apply minutes to Column L
sheetStatus.getRange(selectedRow, 12).setValue(minutes);
}
}
如何在 html 侧边栏中实现下拉菜单并使用工作表中的值填充它?
请参阅这篇文章,其中实现了非常相似的东西。
推荐阅读
- sql - 为几个表之一设计外键
- ruby-on-rails - 使用 Capistrano 部署时,在任何来源中都找不到 Gem
- swift - Xcode 故事板:标签的角半径 (macOS)
- javascript - 使用 Javascript 在 Chrome 中打开一个新的选项卡式窗口
- android - 绘制数据前的 Android 错误:Invalid Region.Op - 只允许 INTERSECT 和 DIFFERENCE
- python - Pandas DataFrames If else 条件包含破折号的多列
- javascript - 访问框架 DOM chrome 扩展
- wpf - WPF组合框排序,但最初没有选择条目?
- android - 为 DialogFragment 上的导航栏设置颜色
- r - GenSA 和 SA 为背包问题提供无意义的输出