使用Google Script将变量推送到HTML

时间:2017-07-21 23:12:42

标签: javascript html google-apps-script

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

我有3份文件:

  1. 链接到Google表格的谷歌脚本(.gs)(我们称之为" X")
  2. 与上述" X"相关联的html文档。 Google表格
  3. " X" * Google表格本身
  4. 这项工作的目的是使用Google表格数据发送设计的电子邮件。

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

    某些插件正在执行相同的工作,但它们未经授权进入我的工作区。这很困难,我试图解决这个问题,因为3天后,我仍然无法解决。

    
    
    <!DOCTYPE html>
    <html>
      <head>
        <base target="_top">
      </head>
      <body>
        <? solution1 ?>
      
      </body>
     </html>
    &#13;
    &#13;
    &#13;

    &#13;
    &#13;
    // 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();
        }
      }
    }
    &#13;
    &#13;
    &#13;

2 个答案:

答案 0 :(得分:1)

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

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

调用evaluate()执行JS scriptlets(包含在&lt ;??&gt;中的内联代码)。要使模板可以访问变量,只需将其作为对象属性附加即可。最后,将变量打印到页面的正确表示法是

<?= myVar ?>

答案 1 :(得分:0)

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

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