html - 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile

标签 html google-apps-script

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

到目前为止,我的研究告诉我,如果我将 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>

但是每次我尝试运行代码时都会收到错误: “对象不允许添加或更改属性。”

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

最佳答案

问题:

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

解决方案:

  • 只有 html 模板可以使用变量进行修改。修改模板并对其进行评估以返回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();

引用文献:

关于html - 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57238218/

相关文章:

javascript - 如何使 Javascript/jQuery 按键事件与屏幕阅读器配合使用

html - 如何以全高显示元素?

javascript - 如何在列表中选择父项

javascript - javascript的src属性中的 `//`有什么作用?

google-apps-script - 如何将光标移动到文档末尾?

google-apps-script - 聊天机器人如何提及尚未进入房间的用户?

JavaScript 不检测动漫 js

arrays - setValues 不能将数组转换为对象[][]

google-apps-script - 从 Google Apps 脚本自定义函数读取和写入单元格公式

google-apps-script - 谷歌脚本 openById : You do not have permission to perform that action