HTML服务 - 来自GSheet的下拉选项列表

时间:2013-08-28 10:49:38

标签: google-apps-script google-sheets google-caja

进入Google Apps脚本和HTML服务

Code.gs 
function doGet() {
  return HtmlService.createTemplateFromFile('HTMLUI').evaluate()
  .setSandboxMode(HtmlService.SandboxMode.NATIVE);
}

这是HTML

HTMLUI.html

<script type="text/javascript"></script>
<script>
<?
  var sheet   = SpreadsheetApp.openById("0Avt7ejriwlxudGZfV2xJUGJZLXktQ2RhQU1uRUgtaXc").getSheetByName("MRF Tab");
  var lastRow = sheet.getLastRow();  
  var myRange = sheet.getRange("C3:C"+lastRow); 
  var data    = myRange.getValues();
?>
</script>
<select>
<? for (var i = 0; i < sourcedata.length; ++i) { ?>
<option><?!= sourcedata[i] ?></option>
<? } ?>
</select>

我在我的一个项目(以及更多代码)中有这个代码,它基本上从表单中捕获信息并将其添加到select中的选项(下拉列表)中,但是当在新项目中尝试相同的代码时,这不起作用,任何想法,我错过了什么。

目前显示的结果是一个带有<?!=sourcedata[i]?>

的下拉框

我该如何纠正这个问题。请帮忙。

编辑:---

请查看@ comment no 3以获取电子表格的链接以及与之相关的一些解决方法......

1 个答案:

答案 0 :(得分:1)

您描述的结果是嵌套模板化HTML的结果 - 显然评估器不是为处理它而设计的,因此未评估的scriptlet显示为文本。

您在test.html中使用模板化HTML来包含来自HTMLUI.html的模板化HTML,而include()函数会尝试将HTMLUI.html的内容视为常规(非模板化)HTML源代码。

解决此问题的一种方法是使用include()版本专门用于模板化html。把它放在你的gs文件中:

function includeTemplate(filename) {
    return HtmlService.createTemplateFromFile(filename).evaluate()
      .setSandboxMode(HtmlService.SandboxMode.NATIVE)
      .getContent();
}

您的test.html随后变为:

<?!= includeTemplate('HTMLUI'); ?>

这将完成您在示例中尝试的内容。但是,要做到这一点,你会失去模板化html的一些功能,因为你没有机会将变量推送到模板。