2

我已经花了几天的时间来克服这个问题,但没有运气。

我在 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>

现在,我希望从电子表格中捕获选项字段,而不是手动输入,如果列范围增加或减少,下拉列表应相应更新。

请任何解决方法...

问候,

4

3 回答 3

2

这是对Html 服务:最佳实践文档中演示的技术的改编。

代码.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 );
}

动态列表.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>
于 2013-07-22T20:22:54.557 回答
2

您可以查看文档,具体来说,将部分变量推送到模板,保险可能很有用。

于 2013-07-22T13:28:03.177 回答
2

要显示数组中的元素而不是数组对象本身,您需要在 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代码确实是个坏主意。您应该使用单独的 gshtml 文件并按照Mogsdad的建议应用优化。

于 2013-07-23T10:33:20.973 回答