在特定 google 个工作表选项卡上编辑单元格时发送电子邮件通知

Send email notification when cell has been edited on a specific google sheets tab

我完全不熟悉编写应用程序脚本。一直试图在网上找到我的问题的答案,但不幸的是没有成功。因此,我正在向社区寻求帮助。

在我的 g sheet 中,我有两个选项卡,一个是输入选项卡 (X),另一个是输出选项卡 (Y)。我想要完成的是每次在输出选项卡 (Y) 中编辑单元格时向给定的电子邮件地址发送电子邮件通知。输出选项卡的可编辑范围为 B2:Y61。我在网上找到了很多关于“编辑中”功能的资料。但是,它们中没有一个与我的示例接近,主要是因为它们指的是 getActiveSheet 而不是特定的。代码越简单越好

例如,我发现以下post非常有趣。不幸的是不知道如何让它与特定的选项卡名称一起使用。此外,如果准确复制和粘贴,公式 returns 会出错,该行引用尚未声明。

https://spreadsheet.dev/send-email-when-google-sheet-is-edited

期待您的来信!

最好的, D

你可以使用这个:

function onEdit(e) {
  var editedSheet = e.source.getActiveSheet();
  var editedCell = e.range;
  var row = editedCell.getRow();
  var col = editedCell.getColumn();
  
  //Check if B2:Y61 was modified in Sheet "Y" based on its row and column index
  if(row>=2 && row<=61 && col>=2 && col<=25 && editedSheet.getName()=="Y"){
    //Send email
    var subject = "Sheet: "+editedSheet.getName();
    var message = "Cell "+editedCell.getA1Notation()+" was modified from '"+e.oldvalue+"' to '"+e.value+"'";
    MailApp.sendEmail("email address",subject,message);
  }
}

它有什么作用?

  • 使用Google Sheets events,您可以使用e.source获取正在修改的活动sheet,使用e.range获取正在修改的单元格,甚至可以获取旧的以及使用 e.oldValuee.value
  • 的单元格的新值
  • 您只需要包含一个条件来检查修改的单元格是否在您喜欢的范围内 B2:Y61 应该有 min row = 2, max row = 61, min col = 2 and max col = 25 and sheet name应该是“Y”。
  • 如果满足所有条件,请使用 MailApp.sendEmail() 发送电子邮件。

注:

您需要将其创建为可安装的触发器,因为它将使用需要身份验证的邮件服务。

要在脚本编辑器中 manually create an installable trigger,请按照下列步骤操作:

输出:


(更新)

此代码会将 X_input sheet 中所做的更改复制到 Y_input sheet 并检查在修改 B2:Y61 范围时是否应发送电子邮件。

function onEdit(e) {
  var editedSheet = e.source.getActiveSheet();
  var editedCell = e.range;
  var row = editedCell.getRow();
  var col = editedCell.getColumn();
  
  var ySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Y_output");

  //Check if edit is done in Sheet "X_input"
  if(editedSheet.getName()=="X_input"){
    //copy modified cell to Y_output sheet
    ySheet.getRange(row,col).setValue(e.value);


    //check if modified cell is within B2:Y61 range and send an email
    if(row>=2 && row<=61 && col>=2 && col<=25){
      //Send email
     var subject = "Sheet: "+editedSheet.getName();
      var message = "Cell "+editedCell.getA1Notation()+" was modified from '"+e.oldvalue+"' to '"+e.value+"'";
      MailApp.sendEmail("ronoel@google.com",subject,message);
    }
  }
 
}