在特定的 Google 表格选项卡上编辑单元格时发送电子邮件通知

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

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

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

例如,我发现以下帖子非常有趣。不幸的是,不知道如何使其与特定的选项卡名称一起使用。此外,如果完全复制并粘贴,公式将返回错误,即尚未声明该行引用。

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

期待您的来信!

最好的, D

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

您可以使用这个:

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 事件,您可以使用
    e.source
    获取正在修改的活动工作表,使用
    e.range
    获取正在修改的单元格,甚至使用
    e.oldValue
    获取单元格的旧值和新值,
    e.value
  • 您只需要添加一个条件来检查修改的单元格是否在您喜欢的范围内
    B2:Y61
    ,其中应该有min row = 2max row = 61min col = 2 max col = 25 并且工作表名称应为“Y”。
  • 如果满足所有条件,请使用 MailApp.sendEmail() 发送电子邮件。

注:

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

要在脚本编辑器中手动创建可安装的触发器,请按照以下步骤操作:

输出:


(更新)

此代码会将 X_input 表中所做的更改复制到 Y_input 表,并检查修改 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("[email protected]",subject,message);
    }
  }
 
}
© www.soinside.com 2019 - 2024. All rights reserved.