将变量从 HtmlService 发送到 Google Apps 脚本函数

Send a variable from HtmlService to a Google Apps Script function

我有一个名为 showModalReport() 的 Google Apps 脚本函数,我将一个名为 reportData 的对象传递给该函数,该对象的类型为 Javascript 对象(它具有 属性 和值对)。此函数创建并提供一个 HtmlTemplate:

function showModalReport(reportData) {

  var template = HtmlService.createTemplateFromFile('modalReport');

  template.reportData = reportData; // this makes reportData available in the HTML modal dialogue

  template = template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);

  SpreadsheetApp.getUi().showModalDialog(template, 'Test Report');

}

然后这是我的 modalReport.html 文件:

<!DOCTYPE html>

Report Name: <?= reportData.name ?>

<input type="button" value="Email Report" onclick="onClickFunctions(???)" />

<script>

function onClickFunctions(reportData) {

  google.script.run.withSuccessHandler( function() { google.script.host.close(); }).emailReport(reportData);

}

</script>

对话有效并正确显示报告名称,因此我知道 reportData 变量可用。接下来我想要它,以便当用户单击按钮时,它会调用 emailReport() 函数,该函数将报告数据通过电子邮件发送给某人,然后关闭模式对话。

这里是emailReport():

function emailReport(reportData) {

  Logger.log('reportData: ' + reportData);

  // the email code

}

但是 emailReport() 函数需要将 reportData 对象作为参数传递,这是我坚持的部分。如何将 reportData 传递给 emailReport()

我已经试过了:

onclick="onClickFunctions(reportData)" // the Javascript console outputs the error: "Uncaught ReferenceError: reportData is not defined"

onclick="onClickFunctions(<? reportData ?>)" // reportData gets sent in to the function but is null 

onclick="onClickFunctions(this.reportData)" // reportData gets sent in to the function but is null

知道如何将该变量发送到函数吗?

此外,我知道这里还有许多其他问题与我的类似。我阅读并尝试了其中许多代码,并尝试了 Google 的 HTMLService 文档中推荐的内容,但我仍然卡住了。

您可以 JSON.stringify reportData 并传递它:

template.reportData = reportData;
template.reportDataJSON = JSON.stringify(reportData);

然后:

onclick="onClickFunctions('<?= reportDataJSON ?>');

和:

function emailReport(reportData) {
    var reportData = JSON.parse(reportData);
}