Google apps script 通过谷歌应用程序脚本向自动电子邮件添加附加列

Google apps script 通过谷歌应用程序脚本向自动电子邮件添加附加列,google-apps-script,Google Apps Script,全部- 我是谷歌应用程序脚本的新手,根据网上的一些帖子拼凑了一个脚本。基本上,我已将此脚本分配给收集表单响应的Google工作表。每次提交新材料时,都会向响应者发送一条确认信息 我通过脚本创建了一个附加列,它不是表单的一部分。我也想把这个专栏作为确认邮件的一部分发送,但是我在添加它时遇到了困难。在这种情况下,它是“AC”列或第29列。下面是我一直在玩的剧本。。。有人能提供一些指导,告诉我如何将AC列(#29)中的数据添加到我的消息底部吗 提前谢谢 代码: 函数发送确认邮件(e){ 试一试{ 变量

全部-

我是谷歌应用程序脚本的新手,根据网上的一些帖子拼凑了一个脚本。基本上,我已将此脚本分配给收集表单响应的Google工作表。每次提交新材料时,都会向响应者发送一条确认信息

我通过脚本创建了一个附加列,它不是表单的一部分。我也想把这个专栏作为确认邮件的一部分发送,但是我在添加它时遇到了困难。在这种情况下,它是“AC”列或第29列。下面是我一直在玩的剧本。。。有人能提供一些指导,告诉我如何将AC列(#29)中的数据添加到我的消息底部吗

提前谢谢

代码:

函数发送确认邮件(e){
试一试{
变量ss、cc、发送者名称、主题、列;
var消息、值、文本体、发送方;
//这是您的电子邮件地址,您将进入CC
cc=Session.getActiveUser().getEmail();
//这将显示为发件人的名称
sendername=“我的名字”;
//可选,但更改以下变量
//为谷歌文档电子邮件设置自定义主题
主题=“提交确认”;
//这是自动回复的主体
message=“以下是您的选择:

”; ss=电子表格app.getActiveSheet(); columns=ss.getRange(1,1,1,ss.getLastColumn()).getValues()[0]; //这是提交者的电子邮件地址 发件人=e.namedValue[“电子邮件地址”].toString(); //仅包括非空的表单值 for(列中的变量键){ var key=列[键]; 如果(例如,名称值[键]){ message+=key+::“+e.namedValues[key]+”
”; } } textbody=message.replace(“
”,“\n”); GmailApp.sendmail(发件人、主题、正文、, {cc:cc,name:sendername,htmlBody:message}); }捕获(e){ Logger.log(例如toString()); }
}一个次要的起点

就在下面的标准中,变量
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.sendmail(发件人、主题、文本正文+
第29列数据, {cc:cc,name:sendername,htmlBody:message})


让我知道这是否适用于您。

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

我认为我对函数或触发器的排序不正确。我正在为所有提交的表单创建一个额外的列,这是一个供用户编辑其条目的链接。电子邮件脚本返回一个未定义的值。我的触发器安排如下。。。有没有办法让它们筑巢?ScriptApp.newTrigger(“assignEditUrls”).forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()).onFormSubmit().create();ScriptApp.newTrigger(“SendConfirmationMail”).forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()).onFormSubmit().create();
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());
}