将变量从 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);
}
我有一个名为 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);
}