0

进入 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>

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

目前显示的结果是一个下拉框<?!=sourcedata[i]?>

我该如何纠正这一点。请提供任何帮助。

编辑: - -

请查看@第 3 条评论以获取电子表格的链接以及一些解决方法...

4

1 回答 1

1

您描述的结果是嵌套模板化 HTML 的结果 - 很明显,评估器并非旨在处理它,因此未评估的小脚本显示为文本。

您正在使用模板化 HTMLtest.html来包含来自 的模板化 HTML HTMLUI.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 的一些功能,因为您将没有机会将变量推送到模板。

于 2013-08-28T18:47:57.737 回答