【问题标题】:Adding Additional Column to Automated Email via Google Apps Script通过 Google Apps 脚本向自动电子邮件添加附加列
【发布时间】:2014-06-03 14:45:23
【问题描述】:

全部 -

我是 Google Apps 脚本的新手,我根据网络上的一些帖子拼凑了一个脚本。基本上,我已将此脚本分配给收集表单响应的 Google 表格。每次新提交时,都会向受访者发送确认消息。

我通过不属于表单的脚本创建了一个附加列。我还希望将此列作为确认电子邮件的一部分发送,但在添加它时遇到了麻烦。在这种情况下,它是“AC”列或第 29 列。下面是我一直在玩弄的脚本......有人可以提供一些指导,说明如何将 AC 列(#29)中的数据添加到底部我的消息?

提前致谢!

代码:

function SendConfirmationMail(e) {

try {

    var ss, cc, sendername, subject, columns;
    var message, value, textbody, sender;

    // This is your email address and you will be in the CC
    cc = Session.getActiveUser().getEmail();

    // This will show up as the sender's name
    sendername = "My Name";

    // Optional but change the following variable
    // to have a custom subject for Google Docs emails
    subject = "Submission Confirmation";

    // This is the body of the auto-reply
    message = "Below are your selections:<br><br>";

    ss = SpreadsheetApp.getActiveSheet();
    columns = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];

    // This is the submitter's email address
    sender = e.namedValues["Email Address"].toString();

    // Only include form values that are not blank
    for ( var keys in columns ) {
        var key = columns[keys];
        if ( e.namedValues[key] ) {
            message += key + ' :: '+ e.namedValues[key] + "<br />"; 
        }
    }

    textbody = message.replace("<br>", "\n");

    GmailApp.sendEmail(sender, subject, textbody, 
                        {cc: cc, name: sendername, htmlBody: message});

} catch (e) {
    Logger.log(e.toString());
}

}

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    一个小的起点

    按照以下标准,通常变量 ss 代表电子表格,您可以从中派生变量 sheet,如下所示:

    var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = SpreadsheetApp.getActiveSheet();

    一个小点,但有助于提高可读性并避免给自己/其他使用它的人造成混淆。

    至于获取AC列数据,不如试试你之前用过的getRange方法:

    var data = sheet.getRange(startRow, column, numRows).getValues();

    其中startRow 是 AC 列中的第一行数据,column 是第 29 列的数字 29,numRows 是您想要从 AC 列中获得的数据行数。

    假设您想要从第 1 行开始的第 29 列中的 10 行。

    var data = sheet.getRange(1, 29, 10).getValues();

    然后您可以像这样简单地将其附加到您的消息正文中:

    GmailApp.sendEmail(sender, subject, textbody +column29Data, {cc: cc, name: sendername, htmlBody: message});

    让我知道这是否适合你。

    【讨论】:

    • 我想我已经错误地订购了函数或触发器。我正在为我的所有表单提交创建一个额外的列,这是用户编辑他/她的条目的链接。电子邮件脚本返回一个未定义的值。我的触发器排列如下......有没有办法嵌套它们? ScriptApp.newTrigger("assignEditUrls") .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()) .onFormSubmit() .create(); ScriptApp.newTrigger("SendConfirmationMail") .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()) .onFormSubmit() .create();
    【解决方案2】:

    您似乎正在使用e.namedValues 提取列值,但这只会填充通过表单提交的字段和值。相反,直接从电子表格中准备好这些值,使用SpreadsheetApp.getActiveRange().getRow() 来确定正在处理哪一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 2020-12-15
      • 2021-11-21
      • 2014-08-02
      • 2022-11-16
      相关资源
      最近更新 更多