获取准确的数据来发送电子邮件时,细胞改变?

问题描述 投票:0回答:1

我这里有一个功能。

function approvedby() {
var approvedrange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Responses 1").getRange("E2:E500");
var approved = approvedrange.getValue();

if (approved == "A"){
var ss = SpreadsheetApp.getActiveSpreadsheet(); ss.setActiveSheet(ss.getSheetByName("Responses 1"));
var s = SpreadsheetApp.getActiveSheet(); 
var dataRange = s.getRange("A2:D500");
var data = dataRange.getValues();
for (i in data) {
var rowData = data[i];  
var formno = rowData[1]; 
var description = rowData[2]; 
var plant = rowData[3]; 

var message = 'Form No: ' + formno + "\n\n" + 'Description: ' + description + "\n\n" + 'Plant: ' + plant + "\n\n";
var subject = "[Approved] Form"
var email = "[email protected]";

MailApp.sendEmail(email, subject, message);

}
}
}

我想要的是当我把Col E的值改为 "A "或 "B "时,邮件通知会自动发送到我的邮箱,邮件内容包括Col A -> Col D的内容,但当Col E发生变化时,邮件内容只显示Col A -> Col D的同一行。

例如:当E2变为 "A "时,邮件中的内容会自动包含在A列-> D列的内容,但当E列发生变化时,邮件中的内容会显示在A列-> D列的同一行。

  • 当E2改为 "A "时,邮件将只发送包含A2-> D2内容的邮件。
  • 当E3改为 "A "时,将发送一封包含A3内容的邮件-> 只有D3。

到现在,用这个脚本,当我把Col E改成 "A "时,它把Col A到Col D的所有内容都发到了我的邮箱里,而不是Col E改变时的同一行。

所以,我在脚本方面是个新手,希望你能帮助我!谢谢。

function email google-apps-script google-sheets auto
1个回答
1
投票

下面的脚本将发送一封电子邮件,其中包含在列E中编辑的行对应的数据(即只有当你输入 "A "时)。

我将假设数据在以下列内,如果我的顺序不正确,你可以修改。

  • 表格编号: B栏
  • 说明: C栏
  • 植物: D栏

您还需要创建一个可安装的触发器。

进入您的 脚本编辑器 再到 编辑->当前项目触发器 和触发通道 添加触发器. 选择您的功能 (onEdit)并将事件类型设置为。在编辑.

如果你把F列留空,脚本也会写出邮件的发送时间(日期时间)。

脚本代码:

function onEdit(e) {

  var ss = e.range.getSheet();
  var range = e.range;

  if(e.source.getSheetName() == "Responses 1" && e.range.getColumn() == 5 && range.getValue()=="A"){


    var emailid= "[email protected]";
    var subject = "[Approved] Form";
    var formno = ss.getRange('B'+ range.getRow()).getValue();
    var description = ss.getRange('C'+ range.getRow()).getValue();
    var plant = ss.getRange('D'+ range.getRow()).getValue();
    var message = "Form No: " +formno+ "\n\nDescription: "+description+ "\n\nPlant: "+plant;
    var sent = ss.getRange("F" + range.getRow());

    MailApp.sendEmail(emailid, subject, message);

    // Write in Column F when the email was sent:

    sent.setFontColor("#228B22");
    sent.setValue("Latest update: Mail sent @" + new Date());
  }
}

0
投票

从你的问题中,我了解到这一点。

  1. 如果把E2或E3或E4等改为 "A",从A2:D500开始的每一行都会通过电子邮件发送。
  2. 您希望只发送被编辑的行的数据。如果E2被编辑,那么A2+B2+C2+D2的数据应该以邮件形式发送,如果E3被编辑,那么A3+B3+C3+D3的数据应该以邮件形式发送......正确吗?

如果我的理解是正确的,请考虑修改你的代码如下。

function approvedby() {
    var EMAIL_SENT = 'EMAIL_SENT';
    var sheet = SpreadsheetApp.getActiveSheet();
    var startRow = 2; // First row of data to process
    var numRows = sheet.getLastRow() - 1; // Number of rows to process
    var dataRange = sheet.getRange(startRow, 1, numRows, 4);

    // Fetch values for each row in the Range.
    var data = dataRange.getValues();
    var emailMessage = "";
        for (var i = 0; i < data.length; ++i) {
            var row = data[i];
            emailMessage = row[0] + row[1] + row[2] + row[3]; //Concatenate the values in column A to column D of the current row
            var emailSent = row[5];  //Checks the email status of the row in column F
                if (emailSent != EMAIL_SENT){
                    try{
                        MailApp.sendEmail(emailAddress, subject, emailMessage);
                        sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
                    }
                    catch(e){
                        sheet.getRange(startRow + i, 3).setValue(e.message);
                    }  
                 }
         }
}

包含一个onEdit触发器来调用approvedby()函数。

https:/developers.google.comapps-scriptarticlessending_emails。

© www.soinside.com 2019 - 2024. All rights reserved.