运行脚本时,我希望在自定义对话框中创建一个下拉菜单。我已经成功地做到了这一点,并且还能够在一个元素中创建一个循环,该循环从静态数组创建下拉列表[即数月的数组并创建一个下拉菜单]。但是,我无法从Google工作表中整理数据并使用该数据创建下拉菜单。
可用于从数组创建下拉菜单的示例代码:
<form>
<select name="Month-test" id="month-selector-test" autofocus="autofocus" autocorrect="off" autocomplete="off">
<option value="" selected="selected" id="todays-month"></option>
<script>
// select this element
var currentDayList = document.getElementById('month-selector-test');
// array of all months
var allMonthsAbv = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
// for every element in the array, add an option
for (var i=0; i<allMonthsAbv.length; i++) {
currentDayList.innerHTML += '<option value=' + allMonthsAbv[i] + '>' + allMonthsAbv[i] + '</option>';
}
</script>
</select>
</form>
无法从工作表中的数据创建下拉菜单的示例代码:
<form>
<select name="Month" id="month-selector" autofocus="autofocus" autocorrect="off" autocomplete="off">
<option value="" selected="selected"></option>
<script>
var monthList = document.getElementById('month-selector');
var allData = SpreadsheetApp.openById('###ID###').getSheetByName('###NAME###').getDataRange().getValues();
var list = [];
for (var i=1;i<allData.length;i++) {
var schoolName = allData[i][1];
if (schoolName != "") {
list.push(schoolName);
}
}
for (var i = 0;i<list.length;i++) {
monthList.innerHTML += '<option value=' + list[i] + '>' + list[i] + '</option>';
}
</script>
</select>
</form>
答案 0 :(得分:0)
您使用Pop的方式不正确。将list.pop更改为list.push
var monthList = document.getElementById('month-selector');
var allData = SpreadsheetApp.openById('###ID###').getSheetByName('###NAME###').getDataRange().getValues();
var list = [];
for (var i=1;i<allData.length;i++) {
var schoolName = allData[i][1];
if (schoolName != "") {
list.push(schoolName);
}
}
for (var i = 0;i<list.length;i++) {
monthList.innerHTML += '<option value=' + list[i] + '>' + list[i] + '</option>';
}
答案 1 :(得分:0)
我当然已经编写并按惯例使用了可以实现所需功能的代码。所以我可以肯定地说可以做到。
我应该添加说明,这样做非常有用。电子表格是非编码者可以愉快地更新的东西,然后我们从中生成代码。
让我感到困惑的是,您提供的代码是在HTML中使用SpreadsheetApp。
我只在GAS代码中做到过。您可能知道一些我不知道的东西,或者可能是回答您的问题的开始。
我经常使用google.script.run吗?
答案 2 :(得分:0)
因此,下一个问题是-您可以方便地,常规地在前景(HTML)和背景(GAS)之间移动
我问这个是因为这是我的关键
答案 3 :(得分:0)
好的-我已经完成了我应该做的事情,并尝试运行您的代码,并提出了许多非常不同(即,单独但非常明确)的问题。我剩下一个尚待解决的问题,但我认为我应该让您留任。在输入工作代码之前,我将尝试解决所有问题。
这是工作代码:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body onload='google.script.run.withSuccessHandler(addMonths).nullFunction();'>
x x x
<select name="month-selector-test">
</select>
<script>
var currentDayList = document.getElementsByName('month-selector-test')[0];
function addMonth(monthAbv){
text=currentDayList.innerHTML;
var firstPart='\<option value=\"';
var secondPart='\"\>';
var thirdPart='\<\/option\>';
text=text + firstPart+name + secondPart + monthAbv + thirdPart;
currentDayList.innerHTML+=text;
}
function addMonths(){
var allMonthsAbv = ["Jan","Feb"];
//"Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
// for every element in the array, add an option
for (var i=0; i<allMonthsAbv.length; i++) {
addMonth(allMonthsAbv[i]);
}
}
</script>
</body>
</html>