如何将值传递到HTML模板边栏?

时间:2018-01-12 15:55:54

标签: javascript google-apps-script google-sheets

我的任务是更换一些常备的Access数据库,我想知道你们是否都可以帮助我。

目前,我有一个Google Sheet即将接受Google表单回复。我想创建某种类型的UI,允许某人一次一个地查看侧边栏上的订单项详细信息。然后,我希望他们能够通过侧边栏更新Google表格,而无需直接更新Google表格。实际上,我需要他们做的只是标记他们已经使用按钮读取该行,该按钮用“读取”或类似的东西更新行。我的第一步是查看是否可以在侧边栏的顶部显示用户的电子邮件,然后处理将电子表格中的数据传入其中。

现在,我的背景几乎完全在SQL / VBA中,所以我的JS缺乏。但是,我能够得到以下工作,但有一个例外;变量leaderEmail不会出现在sidebar as expected

我已经验证了Session.getActiveUser()。getEmail();确实可以使用我们的GSuite域名电子邮件。我认为将其声明为变量应该可以在HTML templating via Apps Script中使用,对吧?

我很感激你们所能提供的任何/所有帮助。

注意:触发器当前设置为onOpen()事件。如果您不想运行Google Sheet,请随时复制Google表格。

谢谢!

Code.gs

// Show Sidebar
function showUpdatesMenu(){
  // Start UI Menu
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
        .createMenu('Updates Menu')
        .addItem('Leadership', 'openLeadership')
        .addToUi();

   // Log the email address of the person running the script.
    var sessionEmail = Session.getActiveUser().getEmail();
    var currentTime = Date.now();
   Logger.log(sessionEmail);
}

Sidebar.html

<!-- Use a templated HTML printing scriptlet to import common stylesheet. -->
<!-- ?!= HtmlService.createHtmlOutputFromFile('mtoStylesheet').getContent(); ? -->
<!-- This CSS package applies Google styling; it should always be included. -->
<!-- link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css" -->

<style>
label {
  font-weight: bold;
}

.branding-below {
  bottom: 54px;
  top: 0;
}

.branding-text {
  left: 7px;
  position: relative;
  top: 3px;
}

.logo {
  vertical-align: middle;
}

.width-100 {
  width: 100%;
  box-sizing: border-box;
  -webkit-box-sizing : border-box;‌
  -moz-box-sizing : border-box;
}

#sidebar-value-block,
#dialog-elements {
  background-color: #eee;
  border-color: #eee;
  border-width: 5px;
  border-style: solid;
}

#sidebar-button-bar,
#dialog-button-bar {
  margin-bottom: 30px;
}
</style>

<!-- Below is the HTML code that defines the sidebar element structure. -->
<!-- div class="sidebar branding-below" -->
  <p>
  <b>Logged in as <?= sessionEmail ?></b>
  </p>
  <hr />
  <p><b>CLEAR ALL LAPS AND STEPS:</b><br> This button clears all previous results.</p>

  <div class="block" id="sidebar-button-bar-clear">
    <button id="sidebar-clear-button1" style="width:100%" onclick="onClearClick();" value="1">Clear blocks</button>
  </div>
  <hr />
  <hr />




<!-- Use a templated HTML printing scriptlet to import JavaScript. -->
<!-- ?!= HtmlService.createHtmlOutputFromFile('sidebar-Javascript').getContent(); ? -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>

</script>

openLeadership.gs

function openLeadership() {
 //  var html = HtmlService.createHtmlOutputFromFile('Page')
//      .setTitle('My custom sidebar')
  var cache = CacheService.getUserCache();
  var leaderEmail = Session.getActiveUser().getEmail();
  var html = HtmlService.createHtmlOutputFromFile('Sidebar')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setTitle('Leadership')
      .setWidth(100)
      .setHeight(200);
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .showSidebar(html);

var cache = CacheService.getUserCache();

}

1 个答案:

答案 0 :(得分:2)

要在HTML文件中呈现Apps脚本数据,您需要将HTML作为模板处理,然后在呈现之前将相关数据显式传递到模板中。

这就是看起来的样子:

  var html = HtmlService.createTemplateFromFile('Sidebar');
  html.sessionEmail = Session.getActiveUser().getEmail();

  var rendered = html.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setTitle('Leadership')
      .setWidth(100)
      .setHeight(200);

  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .showSidebar(rendered);