进入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以获取电子表格的链接以及与之相关的一些解决方法......
答案 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的一些功能,因为你没有机会将变量推送到模板。