将变量从 google 脚本传递到 html 对话框

fla*_*rap 7 html javascript google-apps-script

我正在努力尝试在有人未输入值的情况下进行一些错误提示。在这种情况下,我检查该值是否为空,并最终检查它是否是日期。

所以当这里是破败的时候。

1) 运行if语句,如果值为true,则运行带有字符串参数的错误提示

if (sheetData[4] === ""){
  errorPrompt("Title");
}
Run Code Online (Sandbox Code Playgroud)

2) 使用字符串参数运行以下函数。然后我希望该函数将参数传递给 html iframe。

function to open dialog
function errorPrompt(missvar) {
  var missVar = "test";
  var html = HtmlService.createHtmlOutputFromFile('missingvar')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .showModalDialog(html, missVar + ' is Missing please provide ' + missVar + " and try again.");
}
Run Code Online (Sandbox Code Playgroud)

3) 然后该变量应该传递到显示为模式对话框的 html 文件。如果字符串等于“标题”,则对话框应显示:“标题丢失。请输入标题并重试。”

缺少var.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>            
        <script>
        UI.getElementById("missVar").innerHTML;
        </script>

       The <var id=missVar></var> is missing. Please enter <var id=missVar></var> and try again.
    <input type="button" value="Close"
        onclick="google.script.host.close()" />

  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

上面的 HTML 会显示,但 missVar 不会显示。有人有什么想法吗?请注意,对话框的标题栏正确显示了变量,但它位于 html 之外。

JSD*_*ton 9

HTML 服务:模板化 HTML

HtmlService如果您想做您所描述的事情,请使用模板。它删除了客户端的 JS,并完整地提供完整形成的对话框missVar

var html = HtmlService.createTemplateFromFile(missingVar);

    html.missingVar = missVar;

var htmlOutput = html.evaluate();
Run Code Online (Sandbox Code Playgroud)

然后你的missingvar.html文件将包含

<?= missingVar ?>
Run Code Online (Sandbox Code Playgroud)

无论您希望该变量显示在哪里。

  • 仅当传递的变量不是对象(即简单的字符串或数字)时,此答案才有效。有关更完整的解决方案,请参阅http://stackoverflow.com/a/38314034/2213940 (2认同)

fla*_*rap 0

我改变了提示的创建方式。不再需要 html 文件,因为 js 会动态创建它。

function errorPrompt(missvar) {
  var missVar = "test";
  var html = HtmlService.createHtmlOutputFromFile('missingvar')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .showModalDialog(html, missVar + ' is Missing please provide ' + missVar + " and try again.");
}
Run Code Online (Sandbox Code Playgroud)

function errorPrompt(missvar) {
  var missVar = "test";
   var htmlOutput = HtmlService
     .createHtmlOutput('<p>' + missVar + ' is missing, please enter a ' +  missVar + ' and try again.</p>')
     .setSandboxMode(HtmlService.SandboxMode.IFRAME)
     .setWidth(250)
     .setHeight(300);
 SpreadsheetApp.getUi().showModalDialog(htmlOutput, missVar + ' is missing. Please provide a ' + missVar + ' and try again.');
}
Run Code Online (Sandbox Code Playgroud)