我正在 Google 工作表的侧边栏菜单中工作,以设置脚本中需要的一些变量。
我的脚本已经可以运行了。 这很简单,在提交表单时,它将在我的日历中创建一个事件。
但是,为了简化脚本的安装,我想在侧边栏中显示一个下拉列表,其中包含工作表中所有工作表的名称。
我看到各种帖子,展示了如何制作这样的下拉列表:
- How to create a drop down list in Input Box?
- How can I create a HTML dialog box that contains a dropdown list?
但这不是我的问题,我的问题是如何获取工作表的列表并将其放入下拉列表中。
感谢您的帮助,
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{name: "Sync Calendar Now", functionName: "syncActive"}];
entries.push(null); // adding line separator
entries.push({name: "Settings", functionName: "paramID"});
spreadsheet.addMenu(sheetName, entries);
};
function paramID() {
//TODO : Mettre ID calendrier ici :)
var html = HtmlService.createHtmlOutputFromFile('SideBar')
.setTitle('My custom sidebar')
.setWidth(300);
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.showSidebar(html);
}
这是我获取工作表列表名称的方法
function getListNames(){
var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i=0 ; i<sheets.length ; i++) out.push( sheets[i].getName() )
Logger.log(out);
return out
}
例如,我的工作表中有:工作表 1、工作表 2、工作表 3
当我的侧边栏打开时,我想显示一个下拉列表:工作表 1、工作表 2 和工作表 3
编辑:接下来我想返回所选的值。
最佳答案
您可以使用scriptlets
这允许您在 html
代码中使用 Apps 脚本函数:
<body>
<select name="Available sheets" onchange="myJsFunction()")>
<? var sheets=spreadsheet.getSheets(); ?>
<? for(var i=0;i<sheets.length;i++) { ?>
<option value=<?=sheets[i].getName()?>> <?= sheets[i].getName()?></option>
<? } ?>
</select>
<script>
function myJsFunction(){
var name=document.getElementsByName("Available sheets")[0].value;
google.script.run.goToSheet(name);
};
</script>
</body>
google.script.run允许您将选定的工作表传递给 Apps 脚本函数。
在 .gs 文件中,您需要根据所选工作表定义您想要在 Apps 脚本函数中执行的操作,例如:
function goToSheet(selectedSheetName){
Logger.log('The selected sheet is: '+ selectedSheetName);
}
此外,您需要更改行 var html = HtmlService.createHtmlOutputFromFile('SideBar')
到
var html = HtmlService.createTemplateFromFile('SideBar').evaluate()
允许脚本评估 scriptlet 的内容。
关于javascript - 如何获取侧边栏下拉列表中所有工作表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57710529/