【问题标题】:Push Variables Into HTML Using Google Script使用 Google 脚本将变量推送到 HTML
【发布时间】:2017-07-21 23:12:42
【问题描述】:

我想在“mail_template”HTML 文档中使用 Google 脚本变量。我不明白为什么我的变量不能用于这个 HTML 文档,而我可以将它们用于 google 脚本本身。

我有 3 个文件:

  1. 链接到 Google 工作表(我们称之为“X”)的 google 脚本 (.gs)
  2. 链接到上述“X”Google 表格的 html 文档
  3. 还有“X”*Google 工作表本身

这项工作的目的是使用 Google 表格数据发送设计的电子邮件。

我是初学者,文档似乎是为更高级的用户准备的。 https://developers.google.com/apps-script/guides/html/templates

一些插件正在做同样的工作,但它们没有被授权进入我的工作区。太难了,3天就想解决了,还是不行。

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <? solution1 ?>
  
  </body>
 </html>

// This constant is written in column O for rows for which an email
// has been sent successfully.
var EMAIL_SENT = "EMAIL_SENT";

function testSchemas() { {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = sheet.getLastRow();  
  var numRows = 1;  
  var dataRange = sheet.getRange(startRow, 1, numRows, 15)
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var name = row[2]; 
    var surname = row[3]; 
    var salesRepEmail = row[4]; 
    var qualityAnalystEmail = "xxx@yahoo.fr"
    var customerEmail = row[5]; 
    var websiteURL = row[6]; 
    var solution1 = row[7];
    function doGet() {
  return HtmlService
      .createTemplateFromFile('mail_template')
      .evaluate();
}

    
    
    var htmlBody = HtmlService.createHtmlOutputFromFile('mail_template').getContent(); 
    var emailSent = row[14];     // Third column
    if (emailSent != "EMAIL_SENT") {  // Prevents sending duplicates
     /*MailApp.sendEmail(customerEmail, subject, message, {
        cc: "",
        bcc: qualityAnalystEmail + ", " + salesRepEmail
      }); */
    MailApp.sendEmail({
    to: customerEmail,
    bcc: qualityAnalystEmail + ", " + salesRepEmail,
    subject: 'Résumé De Notre Consultation Du Site Mobile ' + websiteURL,
    htmlBody: htmlBody,
  }); 
}
      Logger.log(name);
      sheet.getRange(startRow + i, 15).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}

【问题讨论】:

    标签: javascript html google-apps-script


    【解决方案1】:

    如果您想将 .gs 文件中的变量传递给您的 HTML 模板,请在对模板对象调用 evaluate() 之前尝试此操作:

    var template = HtmlService.createTemplateFromFile('mail_template');
    template.myVar = myVar;
    return template.evaluate();
    

    调用 evaluate() 会执行 JS 脚本(内嵌在 ?> 中的代码)。要使模板可以访问变量,只需将其附加为对象属性。最后,将变量打印到页面的正确表示法是

    <?= myVar ?>
    

    【讨论】:

    • 嗨安东,感谢您的帮助。它仍然无法正常工作,这可能是我做的愚蠢的事情。我尝试将此代码放入“doGet 函数中,以替换现有的。
    • 抱歉,Marvin,也许这只是格式问题,但看看你的代码,你真的想在另一个函数中调用 doGet() 函数吗?如果是,它不会以这种方式工作。您的脚本需要首先部署为 Web 应用程序。当您通过打开其 URL 访问已发布的 Web 应用程序时,该应用程序会接收传入的 GET 请求并执行 doGet() 函数
    【解决方案2】:

    我也有类似的问题。 Anton 的解决方案帮助了我很多,但我必须在调用 evaluate() 后添加 .getContent() 并将评估的模板分配给一个变量。

    var template = HtmlService.createTemplateFromFile('mail_template');
    template.myVar = myVar;
    var emailToSend = officeTempl.evaluate().getContent();
    
    htmlBody: emailToSend
    

    https://developers.google.com/apps-script/reference/html/html-template#evaluate

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多