提问人:Vasim 提问时间:7/22/2013 最后编辑:Vasim 更新时间:11/28/2016 访问量:8756
要从 Google 电子表格捕获的 HTML 选择选项
HTML select option to be captured from Google Spreadsheet
问:
我花了几天时间来克服这个问题,但没有运气。
我在 Google 脚本中有一个 html 页面,我想要一个下拉列表 - 这是按如下方式实现的
<div>
<select name="source">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
</div>
现在,我希望从电子表格中捕获选项字段,而不是手动输入,如果列范围增加或减少,下拉列表应相应地更新。
请有任何解决方法...
问候
答:
2赞
wchiquito
7/22/2013
#1
您可以查看文档,特别是将部分变量推送到模板,保险可能很有用。
3赞
Mogsdad
7/23/2013
#2
这是对 Html 服务:最佳实践文档中演示的技术的改编。
Code.gs
function doGet() {
var template = HtmlService
.createTemplateFromFile('DynamicList');
var htmlOutput = template.evaluate()
.setSandboxMode(HtmlService.SandboxMode.NATIVE);
return htmlOutput;
}
function getListOptions() {
// In production code, get an array of options by
// reading a spreadsheet.
var options = ['Saab','Opel','Audi'];
return( options );
}
DynamicList.html
<div>
<select id="optionList">
<option>Loading...</option>
</select>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js">
</script>
<script>
// This code in this function runs when the page is loaded.
$(function() {
google.script.run.withSuccessHandler(buildOptionList)
.getListOptions();
});
function buildOptionList(options) {
var list = $('#optionList');
list.empty();
for (var i = 0; i < options.length; i++) {
list.append('<option value="' + options[i].toLowerCase() + '">' + options[i] + '</option>');
}
}
</script>
评论
0赞
Vasim
7/23/2013
如何将其映射到电子表格,我是否应该使用电子表格链接代替“//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js”
0赞
Mogsdad
7/23/2013
请注意 Code.gs 中的注释,这是您应该从电子表格中阅读选项的地方。这些选项应该被编辑为一个值数组,以便与html中的javascript函数兼容。getListOptions()
return
2赞
Neel
7/23/2013
#3
要显示数组中的元素而不是数组对象本身,您需要在 Scriptlet 标记中包含 DATA 数组。而且我认为不需要使用二维数组。正确的语法应该是:
<?
var sheet = SpreadsheetApp.openById(0Avt7ejriwlxudGZfV2xJUGJZLXktQ2RhQU1ugtgtaXc").getSheetByName("MRF Tab");
var lastRow = sheet.getLastRow();
var myRange = sheet.getRange("C3:C"+lastRow);
var data = myRange.getValues();
?>
<div>
<select>
<? for (var i = 0; i < data.length; ++i) { ?>
<option><?!= data[i] ?></option>
<? } ?>
</select>
</div>
在模板中混合数据获取代码和 html UI 代码确实是一个坏主意。您应该使用单独的 gs 和 html 文件,并按照 Mogsdad 的建议应用优化。
评论
0赞
Vasim
7/23/2013
它给了我以下错误“无效的脚本或 HTML 内容:HtmlOutput:4+1 - 2:意外的令牌<。jsfiddle.net/c6242/1917(注意:我在 <script> 标签之间包含 javascript......
1赞
Neel
7/23/2013
好吧,它对我来说非常有效。看看这个: 应用程序: script.google.com/macros/s/...片材:docs.google.com/spreadsheet/...
0赞
Vasim
7/23/2013
您能否将工作簿共享为“可以编辑”,我认为它不是,这样我就可以去检查脚本编辑器。看起来你带来了一些releif...
0赞
Vasim
7/23/2013
这正是我想要的......但是如果我转到脚本编辑器或脚本管理器,则没有可见的代码......如何查看其背后的代码...特别鸣谢
1赞
Neel
7/23/2013
我已经修改了代码以在电子表格中正常工作。现在,您可以从脚本编辑器访问代码。可以使用“DIALOG”菜单下的“OPEN”选项触发 UI
评论