1

我一直在查看此处发布的各种其他解决方案,但它们似乎都不适合我。

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

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

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);
}

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

<!DOCTYPE html>

<html>

<div>
 <form>
   <input type="text" name="time" id="time" style="width: 40px;">
   <br><br><input type="button" class="action" onClick="writeFormData(); 
   alert('submitted')" value="Submit"/>
 </form>
</div>

<script>
  var timeInput = document.getElementById("time");
  var timehtml = time;
  timeInput.value = timehtml;
</script>

<script type="text/javascript">
       function writeFormData() {
           google.script.run.processForm(document.forms[0]);
       }
</script>

</html>

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

4

1 回答 1

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”变量的原因。

于 2018-05-22T11:35:56.010 回答