通过Google Apps脚本向自动电子邮件添加其他列

时间:2014-06-03 14:45:24

标签: google-apps-script

全部 -

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

我通过脚本创建了一个附加列,该列不是表单的一部分。我也希望将此列作为确认电子邮件的一部分发送,但我无法添加它。在这种情况下,它是列'AC'或列29.下面是我一直在玩的脚本...有人可以提供一些指导,如何将AC(#29)列的数据添加到底部我的留言?

提前致谢!

CODE:

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());
}

}

2 个答案:

答案 0 :(得分:0)

一个小起点

只是遵循标准,通常变量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。

假设您希望第29行从第1行开始有10行。

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

然后,您可以将其简单地附加到您的邮件正文中,如下所示:

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

请告诉我这是否适合您。

答案 1 :(得分:0)

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