将google脚本值传递给html

时间:2018-05-22 11:14:06

标签: javascript html google-apps-script

我一直在寻找这里发布的各种其他解决方案,但它们似乎都不适合我。

我试图将我的google脚本中的变量(最初存储在google的PropertiesService中)传递给我的html,因为我想使用以前保存的数据作为我的文本输入框的值(显示以前保存的数据。)

这是我的gs文件(减去不相关的部分):

pisaContext

这是我的html文件(遗漏了其他不相关的部分):

function openSettings() {

  var htmlTemplate = HtmlService.createTemplateFromFile('settingsForm')


  var userProperties = PropertiesService.getUserProperties();
  var time = userProperties.getProperty('selectedTime');
  htmlTemplate.timehtml = time;

  var html = htmlTemplate.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setTitle('Settings')
    .setWidth(300)
  SpreadsheetApp.getUi()
    .showSidebar(html);
  return html
}

function processForm(form) {

  var userProperties = PropertiesService.getUserProperties();

  var time = userProperties.getProperty('selectedTime');
  time = form.time;
  userProperties.setProperty('selectedTime', time);
}

也许我的整个方法都是错误的。但我想要做的就是在Google的PropertiesService中存储用户选择(可能想要将userProperties更改为documentProperties,以使设置文档特定),然后在按下提交按钮时保存这些值侧边栏。下一次打开侧边栏时,应显示这些保存的设置。

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。因为您已经将变量传递给HtmlTemplate对象,所以剩下的唯一步骤就是使用GAS模板引擎来渲染它。

.GS文件

...
htmlTemplate.timehtml = time;
...

HTML模板

   <input type="text" name="time" id="time" value="<?!= timehtml ?>">

有关GAS中模板化HTML的更多信息https://developers.google.com/apps-script/guides/html/templates

您的代码不起作用的原因是您通过设置HtmlTemplate对象的属性来传递变量。 HtmlTemplate和HtmlOutput对象仅存在于GAS脚本编辑器运行时的上下文中。您的浏览器最终获取HTML字符串,然后将其解析为DOM元素和呈现。 在该阶段,任何与GAS相关的上下文都将丢失,您本地安装的浏览器软件将成为代码的新运行时环境。这就是为什么你不能引用'timehtml'变量的原因。