【问题标题】:I am trying to pass a variable from my Google Script through to HtmlOutputFromFile我正在尝试将变量从我的 Google 脚本传递到 HtmlOutputFromFile
【发布时间】:2019-07-28 05:30:57
【问题描述】:

我正在尝试创建一个带有下拉列表的输入框,其中该列表基于从电子表格中提取的二维数组。

到目前为止,我的研究告诉我,如果我将 HtmlService.createHtmlOutputFromFile 存储在一个变量中,那么我可以“设置该变量的属性”,然后将其传递给 html。 (我看到这个专门用于 HtmlService.createTemplateFromFile)

//google script code
function selectMonth(){
  var monthTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var LR = monthTab.getRange("B1").getDataRegion().getLastRow()
  var sNamesArray = monthTab.getRange(1,2,LR,2).getValues()

  var monthBox = HtmlService.createHtmlOutputFromFile('Month Box')
    .setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setWidth(250)
    .setHeight(50);

//i believe the error to be occurring on this line
  monthBox.mList = sNamesArray

SpreadsheetApp.getUi().showModalDialog(monthBox, 'Student Name List');
};

<!--html code-->
<select id="tabMonth">
  <option disabled selected>Select Month</option>
  <?for(var i=0;i<list.length;i++){ ?>
    <option value=<?mList[i][1]?>><?mList[i][0]?></option>
  <?}?>
</select>

但每次我尝试运行代码时都会出现错误: "对象不允许添加或更改属性。"

根据我所知道的错误发生在上面指示的行

【问题讨论】:

  • 从 JavaScript 中,您可以使用 google.script.run 调用 selectMonth() 并将数组返回给 withSuccessHandler。处理程序可以将其发送到函数名或通过匿名函数处理。
  • 看看这个example。我认为它真的很接近你想要的。
  • 谢谢@Cooper。但我真的很想确定这种特殊的技术,这是我提出问题的例子。 [此视频](youtube.com/watch?v=f9dqsHDrQCc)
  • 文件month box.html吗?里面有这段代码吗? &lt;select id="tabMonth"&gt; &lt;option disabled selected&gt;Select Month&lt;/option&gt; &lt;?for(var i=0;i&lt;list.length;i++){ ?&gt; &lt;option value=&lt;?mList[i][1]?&gt;&gt;&lt;?mList[i][0]?&gt;&lt;/option&gt; &lt;?}?&gt; &lt;/select&gt;
  • @Cooper 是的。该代码在我的 Month Box.html 文件中。

标签: html google-apps-script


【解决方案1】:

问题:

  • 尝试修改 HtmlOutput 对象,而不是修改 HtmlTemplate 对象。

解决办法:

  • 只有 html 模板可以用变量进行修改。修改 template 并评估它以返回 HtmlOutput

片段:

var monthBox = HtmlService.createTemplateFromFile('Month Box');//Type: HtmlTemplate
monthBox.mList = sNamesArray;

monthBox = monthBox.evaluate()    //Type: HtmlOutput after evaluation
    .setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setWidth(250)
    .setHeight(50);

monthbox = monthbox.getContent();

参考资料:

【讨论】:

  • 非常感谢这解决了我的问题!我所要做的就是更改从“createHtmlTemplateFromFile”中删除“Html”,由于某种原因它不会接受它。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 2021-12-06
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多