如何将变量传递给HTML正文

时间:2016-03-09 23:54:23

标签: javascript html google-apps-script google-sheets

我创建了这个脚本,允许我选择某个食物项目和服务大小,然后计算营养价值,将其添加到数据库中,在一天结束时将其全部汇总并向我发送一封电子邮件概述。它几乎都可以工作,我只是在将一些变量从我的脚本传递到HTML格式的电子邮件时遇到了麻烦。

在下面代码的部分中,totals是电子表格范围内的数据值。我希望检索到的caloriescaloriesFromFatpolyFat值可以替换电子邮件htmlBody中的匹配文字。

 var calories = totals[0][25];
    var caloriesFromFat = totals[0][26];
    var polyFat = totals[0][27];
  }
//Sends email with summary
    MailApp.sendEmail({
     to: "user@example.com",
     subject: "Daily Intake Log",
     htmlBody:  <table style="width:100%">
  <tr>
    <td>Calories</td>
    <td>calories</td>       

  </tr>

  <tr>
    <td>Calories From Fat</td>
    <td>caloriesFromFat</td>        

  </tr>

  <tr>
    <td>PolyUnsaturated</td>
    <td>polyFat</td>        

  </tr>

</table>

   });

当我将变量caloriescaloriesFromFatpolyFat的内容输出到日志时,它们都包含它们应该包含的数字。但是当我收到电子邮件时它没有插入变量的内容,只留下变量的名称,例如calories

如何将计算值输入我的电子邮件?

2 个答案:

答案 0 :(得分:2)

HTML必须是字符串(文本),您需要使用文本公式构建HTML。 JavaScript中的文本字符串放在一起,(连接)加号:

for i in range(0, 10):
    attr = {}
    if gender == 0 and len(men) < 51 :
        height = float((random.uniform(1.3, 1.9) + (random.randint(10,20)/100.)).__format__('.2f'))
        weight = float((random.uniform(45, 100) * height).__format__('.2f'))
        attr['height'] = height 
        attr['weight'] = weight

        men.append(attr)

如果在HTML属性中使用双引号,则在字符串的末尾使用单引号。 然后只需使用电子邮件HTML的变量名称:

var tableHTML = '<table style="width:100%">' + //Note single quotes on ends
   "<tr><td>Calories</td><td>" +
   calories + 
   "</td></tr>" +
   "<tr><td>Calories From Fat</td><td>" + 
   caloriesFromFat + 
   "</td></tr>" +
   "<tr><td>PolyUnsaturated</td><td>" + 
   polyFat + 
  "</td></tr>" +
   "</table>";

答案 1 :(得分:1)

您可以使用Printing Scriptlets优雅地完成此操作,假设您的电子邮件HTML正文位于项目中的单独文件中。

这是一个用于插入calories值的打印scriptlet。请注意,语法将变量名称包含在特殊标记<?= ?>

<?=calories?>

要填写模板,请先使用HtmlService获取模板,然后将打印scriptlet中的变量视为模板的对象属性。

// get email template
var template = HtmlService
      .createTemplateFromFile('email');

// assign values to template printing scriptlets
template.calories = totals[0][25];
template.caloriesFromFat = totals[0][26];
template.polyFat = totals[0][27];

最终代码

<强> Code.gs:

// Get my email address
var me = Session.getActiveUser().getEmail();

// get email template
var template = HtmlService
      .createTemplateFromFile('email');

// assign values to template printing scriptlets
template.calories = totals[0][25];
template.caloriesFromFat = totals[0][26];
template.polyFat = totals[0][27];

// evaluate template to generate HTML
var htmlBody = template.evaluate();

//Sends email with summary
MailApp.sendEmail({
  to: me,
  subject: "Daily Intake Log",
  htmlBody:  htmlBody
});

<强> email.html

<!-- HTML Email body with printing scriptlets -->
<table style="width:100%">
  <tr>
    <td>Calories</td>
    <td><?=calories?></td>
  </tr>
  <tr>
    <td>Calories From Fat</td>
    <td><?=caloriesFromFat?></td>
  </tr>
  <tr>
    <td>PolyUnsaturated</td>
    <td><?=polyFat?></td>
  </tr>
</table>