【问题标题】:Email Google Sheet cells and format通过电子邮件发送 Google 表格单元格和格式
【发布时间】:2017-08-18 16:09:10
【问题描述】:

背景:我是一名教师。我通过表格进行了测试。我通过在每个单元格上使用各种背景颜色(代表学生对问题的答案)对测试进行评分。工作表的每一行在 B 列中都有他们的电子邮件地址。

问题:我想通过电子邮件将整行(包括格式)发送到 B 列中的该地址,以便每个学生都有他们的答案以及我如何给他们评分的记录。

问题:如何通过电子邮件发送一行数据,包括格式?

我正在使用以下脚本,它适用于通过电子邮件发送单个单元格而不进行格式化:

`function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 1;   // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 2)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddress = row[1];  // Second column
    var message = row[0];       // I want the whole row, including formatting.
    var subject = "Sending emails from a Spreadsheet";
    MailApp.sendEmail(emailAddress, subject, message);
    ContentService.createTextOutput("hello world!");
  }
}`

【问题讨论】:

标签: email google-apps-script


【解决方案1】:

在这里。

我决定添加另一个功能,因为它使它更干净一些。您将能够通过使用 css 样式来调整输出的样式。如果您保留注释行,您可以使用它们进行调试。我和他们一起测试了代码,看起来不错。所以让我知道它是如何处理电子邮件的。

  function sendEmails() 
  {
  var br='<br />';
  var sheet=SpreadsheetApp.getActiveSheet();  
  var dataRange=sheet.getDataRange();
  var dataA=dataRange.getValues();
  var backA=dataRange.getBackgrounds();
  //var s='';//Please leave the commented lines.  If needed for the future they are handy to have
  for (var i=1;i<dataA.length;i++) 
  {
    var emailAddress=dataA[i][1];  
    var message=formatRow(sheet.getName(),dataA[i],backA[i],dataA[0]);
    var subject="Sending emails from a Spreadsheet";
    //s+=br + '<strong>EmailAddress:</strong>' + emailAddress + br + '<strong>Subject:</strong>' + subject + br + message + '**************************************' + br;
    MailApp.sendEmail({to:emailAddress,subject:subject,htmlBody:message});

  }
  //var userInterface=HtmlService.createHtmlOutput(s);
  //SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Email Message')
}

我刚刚注意到黄色背景,所以我很快为它添加了另一个部分。

   //assume Timestamp,EmailAddres,Score,FirstName,LastName,Section...
function formatRow(sheetName,rowA,rowbackA,titleA)
{
  var br='<br />';
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName(sheetName);
  var html='';
  if(rowA && rowbackA)
  {
    html='';
    for(var j=0;j<rowA.length;j++)
    {
      switch(rowbackA[j])
      {
        case '#ff0000':
          html+=br + '<span style="font-weight:600;font-size:20px;">' + titleA[j] + ':</span>' + br + '<span style="background-color:#ff0000;">' + rowA[j] + '</span>' + br;
          break;
        case '#ffff00':
          html+=br + '<span style="font-weight:600;font-size:20px;">' + titleA[j] + ':</span>' + br + '<span style="background-color:#ffff00;">' + rowA[j] + '</span>' + br;
          break;
        case '#ffffff':
          html+=br + '<span style="font-weight:600;font-size:20px;">' + titleA[j] + ':</span>' + br + '<span style="background-color:#ffffff;">' + rowA[j] + '</span>' + br;
          break
      }
    }
  }
  return html;
}

提醒一下,我使用 #ff0000 表示红色,所以不要在不更改代码的情况下更改为不同的阴影。

万一学生的电子邮件被狗吃掉了,您可能只想发送一封电子邮件。

function sendOneEmail(firstName,lastName) 
{
  if(firstName && lastName)
  {
    var br='<br />';
    var sheet=SpreadsheetApp.getActiveSheet();  
    var dataRange=sheet.getDataRange();
    var dataA=dataRange.getValues();
    var backA=dataRange.getBackgrounds();
    //var s='';//Please leave the commented lines.  If needed for the future they are handy to have
    for (var i=1;i<dataA.length;i++) 
    {
      if(firstName==dataA[i][3] && lastName==dataA[i][4])
      {
        var emailAddress=dataA[i][1];  
        var message=formatRow(sheet.getName(),dataA[i],backA[i],dataA[0]);
        var subject="Sending emails from a Spreadsheet";
        //s+=br + '<strong>EmailAddress:</strong>' + emailAddress + br + '<strong>Subject:</strong>' + subject + br + message + '**************************************' + br;
        MailApp.sendEmail({to:emailAddress,subject:subject,htmlBody:message});
       }
    }
    //var userInterface=HtmlService.createHtmlOutput(s);
    //SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Email Message')
  }
}

这是电子表格的鸟瞰图。

【讨论】:

  • 我应该更具体。我使用的唯一格式是背景颜色和文本颜色(用于 cmets)。你是说我需要对我用 html 编辑的每个单元格进行编码?
  • 构建一个小 html 模板实际上会更容易,然后像我的小例子一样插入值 Utilities.formatString('formatted String',list of parameters); 然后你只需将变量添加到参数列表中,它们就会填充所有“%s”。如果您熟悉著名的 printf 命令,它会做同样的事情。然后,您所要做的就是构建 html 模板。它还使填写电子表格更加容易。这是一种邮件合并的想法。
  • 非常感谢您的帮助。这是删除个人信息的副本的链接。我真的想复制每一行并将其通过电子邮件发送到 B 列中的地址。他们必须看到红色背景(知道这是错误的)和彩色文本(我的 cmets)。 docs.google.com/a/hcpsnc.org/spreadsheets/d/…
  • 应该是现在。对不起。
  • 对了,我刚刚注意到黄色背景是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 2020-12-15
相关资源
最近更新 更多