【问题标题】:Email from spreadsheet Javascript: How to make message equal more than one column?来自电子表格 Javascript 的电子邮件:如何使消息等于一列以上?
【发布时间】:2014-06-26 14:22:09
【问题描述】:

我和一位同事正在使用 Google 表单收集学生的短文。数据被写入电子表格。我们希望将反馈输入到电子表格中,并有一个脚本通过电子邮件向每个学生发送他们的论文副本和反馈。

Google 提供以下代码(来源:Email Code):

我们已经弄清楚如何增加脚本从电子表格中读取的行数,以适应我们的班级规模。

我们无法弄清楚的是如何使信息与文章(在一个列中)和反馈(在另一列中)相等。为了实现这一点,我们需要对代码进行哪些更改?

【问题讨论】:

  • 您是否尝试过添加这两列?类似var message = row[1] + row[2];
  • 发送一封记录在here的html电子邮件可能更具可读性

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


【解决方案1】:

这是demo spreadsheet and script 的链接。只需复制电子表格并测试代码即可。

通过突出显示电子表格中的 1 行或多行数据并从脚本编辑器运行 emailFeedback 函数来测试脚本。或者,您选择了 1 行或更多行,您可以从电子表格中的“自定义工具”菜单执行脚本。

我把它分成两个函数。第一个函数emailFeedback 获取您在电子表格中选择的行,并循环遍历每一行数据,并为每一行调用第二个函数sendEmail,前提是有反馈和文本(可以添加更多验证和错误处理)。

function emailFeedback() {
  var ss = SpreadsheetApp.getActiveSheet();
  var range = ss.getActiveRange(); 

  var numRows = range.getNumRows();
  var values = range.getValues();

  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    var to = row[1];
    var story = row[2];
    var feedback = row[3]; 

    if (feedback.length > 0 && story.length > 0) {
      // make sure valid story and feedback before sending
      sendEmail(to, story, feedback);
    }
  }
};

GmailApp 用于发送上面 cmets 中 igor 建议的 html 格式的电子邮件。 plainTxtBody 可能会被省略,但如果收件人无法解析 html 格式的电子邮件,它可能会很有用。 storyHTMLfeedbackHTML 将用户表单提交中的换行符替换为 &lt;p&gt; 标签,以便您在电子邮件中获得适当的间距。

function sendEmail(to, story, feedback) {
  var sendToName = to.split('@')[0];

  // email content
  var emailSubject = "Feedback on your story submission";

  // plain text body - just in case receiver can't parse html formatted email
  var plainTxtBody = "Hi " + sendToName + ",\n" +
                     "You wrote:\n" + story + "\n" +
                     "Our feedback:\n" + feedback;

  // html formatting isn't necessary, but nice for reading :)
  var htmlBody = '<html><body>';
  var htmlFooter = '</body></html>';

  // replacing newline characters with paragraph breaks to make it more readable
  var storyHTML = story.replace(/\n/g, "</p><p>");
  var feedbackHTML = feedback.replace(/\n/g, "</p><p>");

  var emailMessage = "<p>Hi " + sendToName + ",</p>" +
                     "<p><strong>You wrote:</strong><p>" +
                     "<p>" + storyHTML + "</p>" +
                     "<hr>" + 
                     "<p><strong>Here is our feedback:</strong></p>" + 
                     "<p>" + feedbackHTML + "</p>";


  htmlBody += emailMessage + htmlFooter;

  // GmailApp must have default recipient, subject, body attributes followed by jsobject options {}
  // Differs from MailApp syntax but has more options -- see documentation on GmailApp
  GmailApp.sendEmail(to, emailSubject, plainTxtBody, { 
                     htmlBody: htmlBody,
                    });
};

希望这有帮助:)

【讨论】:

    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多