【问题标题】:Using data from var in subjectLine在 subjectLine 中使用来自 var 的数据
【发布时间】:2016-03-03 02:57:45
【问题描述】:

我正在修改 Amit 的代码(在此处找到:http://labnol.org/?p=20884) 尝试使用 Google 表单中的数据发送电子邮件。 但我要抓住的是他的钥匙和专栏。 我想专门从有问题的行中获取前 1 和 2 列的数据,并将其用作主题字段中的 var。 但是输出(在电子邮件中和发送到体式时)被列为未定义。我哪里做错了?

/*
   Send Google Form Data by Email v4.2
   Written by Amit Agarwal amit@labnol.org
   Source: http://labnol.org/?p=20884
*/

/**
 * @OnlyCurrentDoc
 */

function Initialize() {

  try {

    var triggers = ScriptApp.getProjectTriggers();

    for (var i in triggers)
      ScriptApp.deleteTrigger(triggers[i]);

    ScriptApp.newTrigger("EmailGoogleFormData")
      .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
      .onFormSubmit().create();

  } catch (error) {
    throw new Error("Please add this code in the Google Spreadsheet");
  }
}

function EmailGoogleFormData(e) {

  if (!e) {
    throw new Error("Please go the Run menu and choose Initialize");
  }

  try {

    if (MailApp.getRemainingDailyQuota() > 0) {

      // You may replace this with another email address
      var email = "x+00000000@mail.asana.com";

      // Enter your subject for Google Form email notifications

      var key, entry,
        message = "",
        ss = SpreadsheetApp.getActiveSheet(),
        cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];

      // Iterate through the Form Fields
      for (var keys in cols) {

        key = cols[keys];
        entry = e.namedValues[key] ? e.namedValues[key].toString() : "";

        // Only include form fields that are not blank
        if ((entry !== "") && (entry.replace(/,/g, "") !== ""))
          message += key + ' :: ' + entry + "\n\n";
        var first = entry[1];
        var last = entry[2];

              var subject = first+" "+last+": Interested Candidate";

      }

      MailApp.sendEmail(email, subject, message);
    }
  } catch (error) {
    Logger.log(error.toString());
  }
}

/* For support, contact developer at www.ctrlq.org */

【问题讨论】:

  • 对于每一行数据,您要发送一封电子邮件吗?
  • 嗨@SandyGood!你是我的英雄。是的。工作表的每个新行都会发送一封新电子邮件。
  • 找到这个话题。也许我可以使用它,但我又迷路了:stackoverflow.com/questions/20037987/…

标签: google-apps-script google-sheets google-apps google-forms asana


【解决方案1】:

entry 是一个字符串,在这里定义:

    entry = e.namedValues[key] ? e.namedValues[key].toString() : "";

...稍后您将其视为数组:

    var first = entry[1];
    var last = entry[2];

此时,firstlast 都将是 undefined,因为 entry 不是数组。此外,这是在遍历行中所有列的 for 循环内 - 您看不到任何不良副作用,但这些分配和 subject 的生成会多次发生。

最后一条线索表明了实现目标的更好方法。在循环之前定义firstlast 变量,使用默认值。然后在遍历列时,注意包含候选人姓名的列,并更新默认内容。最后,在循环之后,生成主题行。

function EmailGoogleFormData(e) {

  if (!e) {
    throw new Error("Please go the Run menu and choose Initialize");
  }

  try {

    if (MailApp.getRemainingDailyQuota() > 0) {

      // You may replace this with another email address
      var email = "x+00000000@mail.asana.com";

      // Enter your subject for Google Form email notifications

      var key, entry,
        first = "unknown", last = "unknown",
        message = "",
        ss = SpreadsheetApp.getActiveSheet(),
        cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];

      // Iterate through the Form Fields
      for (var keys in cols) {

        key = cols[keys];
        entry = e.namedValues[key] ? e.namedValues[key].toString() : "";

        // Only include form fields that are not blank
        if ((entry !== "") && (entry.replace(/,/g, "") !== ""))
          message += key + ' :: ' + entry + "\n\n";

        if (key == "first") {  // Assumes "first" is column header
          first = entry;
        }
        if (key == "last") {  // Assumes "last" is column header
          last= entry;
        }

      }

      var subject = first+" "+last+": Interested Candidate";

      MailApp.sendEmail(email, subject, message);
    }
  } catch (error) {
    Logger.log(error.toString());
  }
}

【讨论】:

    【解决方案2】:

    Sandy Good 创建了一个类似的应用程序Data Director。我不知道他为什么在这里没有提到?可能不是您想要的。

    我还没有使用它,但认为他的作品可能会帮助需要它的人。

    ----------------------------------------

    概述:

    将表单数据发送到不同的工作表。与日历集成。发送电子邮件。创建一个编辑 URL 和/或预填充 URL。

    Forms Add-on 的 Data Director 具有多种功能。它可以将表单响应发送到备用电子表格。提交表单时,它可以发送一封或多封电子邮件。它可以将客人添加到您的日历活动中。 提交您的 Google 表单后,Forms Add-on 的 Data Director 可以获取最后一次提交的表单,并将其保存到您选择的第二个电子表格目标位置。目标电子表格可以是您的 Google 帐户有权写入的任何 Google 电子表格。例如:您的 Google 表单当前将数据写入电子表格,但您希望表单响应也进入同一电子表格的第二张工作表中。这个附加组件可以做到这一点。或者插件可以将表单响应的副本写入完全不同的电子表格。 如果要将表单响应的副本保存到表单设计中设置的目标以外的目标,则应安装此加载项。 但这并不是 Data Director 能做的全部! Data Director 还将创建一个编辑 URL 和/或预填充 URL,并将这些链接保存到电子表格。 还有更多!它还会向您选择的电子邮件地址发送一封带有自定义消息的电子邮件。这是您可能想要或需要使用的额外选项。

    这是 Data Director 可以做什么的列表!

    • 将表单回复的副本发送到 Google 电子表格。

      • 已收到表单响应的同一 Google 电子表格,或

      • 与当前接收表单响应的电子表格不同。

    • 如果您愿意,请从复制的响应中排除时间戳。默认是包含时间戳。

    • 创建编辑 URL 并保存指向目标电子表格的链接。

    • 创建一个预填充 URL 并将链接保存到目标电子表格。

    • 向您选择的电子邮件地址发送多封电子邮件。

    • 向从表单字段收集的电子邮件地址发送电子邮件。

    • 在电子邮件中包含编辑网址和/或预填充网址。

      • 是否将电子邮件抄送至您选择的地址。

      • 包括指定主题行的选项。

      • 电子邮件的正文可以写入电子邮件的设置中。无需创建模板电子邮件。

    【讨论】:

    • 感谢分享@br-syan。这对我的下一个任务很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多