Javascript Appscript OneEdit获取行号并发送电子邮件

Javascript Appscript OneEdit获取行号并发送电子邮件,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正试图想出一个脚本,onEdit将获得选中复选框的行号,复制该行号并在单元格M1的另一个工作表上设置值,然后自动发送电子邮件,但编辑时不会触发,在我的代码下面: function onEdit(e) { if(e.range.getSheet().getName() != 'Example') { return; } if(e.range.columnStart==22 && e.value=="TRUE") { Spreadshee

我正试图想出一个脚本,onEdit将获得选中复选框的行号,复制该行号并在单元格M1的另一个工作表上设置值,然后自动发送电子邮件,但编辑时不会触发,在我的代码下面:

function onEdit(e) {
  
  if(e.range.getSheet().getName() != 'Example') { return; }
  if(e.range.columnStart==22 && e.value=="TRUE") {

    SpreadsheetApp.getActiveSpreadsheet().getActiveRange().getRow().getSheetByName("Email").range("M1").setValue(row);

    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email").activate();

var details = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email").getRange("M1").getValues();
 var recipient = "youremail@example.com";
  var subject = "Example for the Number" && details;
  var body = "This is an example test";
  MailApp.sendEmail(recipient, subject, body);
  
    }
    
}

我相信你的现状和目标如下

  • 复选框放在“示例”表的“V”列中
  • 选中复选框后,您希望检索选中复选框的行号,并将行号放入“电子邮件”工作表上的单元格“M1”
  • 并且,您希望发送一封包含行号的电子邮件
修改点:
  • 在脚本中,位于
    SpreadsheetApp.getActiveSpreadsheet().getActiveRange().getRow().getSheetByName(“电子邮件”).range(“M1”).setValue(行)
    getRow()
    返回行号。因此,我认为在
    getSheetByName(“Email”)
    处会发生错误。我想这可能是你问题的原因
  • 不幸的是,根据你的问题,我不确定你的动机是什么。但是,在脚本中,使用了
    MailApp.sendmail
    。在这种情况下,
    MailApp.sendmail
    不能与简单触发器一起使用。由此,我认为也会发生错误。
    • 因此,在这种情况下,请使用可安装的OnEdit触发器
    • 另外,当使用可安装触发器时,请从别人的
      onEdit
      中重命名函数名。因为当
      onEdit
      作为可安装触发器安装时,简单触发器和可安装触发器都会执行2次。请小心这个
  • 顺便说一下,关于复选框,您可以使用
    isChecked()
    方法
当上述各点反映到脚本中时,它将变成如下所示

修改脚本: 请复制并粘贴以下脚本和i。使用此脚本时,请选中“示例”页上“V”列的复选框

参考资料:

我相信你的现状和目标如下

  • 复选框放在“示例”表的“V”列中
  • 选中复选框后,您希望检索选中复选框的行号,并将行号放入“电子邮件”工作表上的单元格“M1”
  • 并且,您希望发送一封包含行号的电子邮件
修改点:
  • 在脚本中,位于
    SpreadsheetApp.getActiveSpreadsheet().getActiveRange().getRow().getSheetByName(“电子邮件”).range(“M1”).setValue(行)
    getRow()
    返回行号。因此,我认为在
    getSheetByName(“Email”)
    处会发生错误。我想这可能是你问题的原因
  • 不幸的是,根据你的问题,我不确定你的动机是什么。但是,在脚本中,使用了
    MailApp.sendmail
    。在这种情况下,
    MailApp.sendmail
    不能与简单触发器一起使用。由此,我认为也会发生错误。
    • 因此,在这种情况下,请使用可安装的OnEdit触发器
    • 另外,当使用可安装触发器时,请从别人的
      onEdit
      中重命名函数名。因为当
      onEdit
      作为可安装触发器安装时,简单触发器和可安装触发器都会执行2次。请小心这个
  • 顺便说一下,关于复选框,您可以使用
    isChecked()
    方法
当上述各点反映到脚本中时,它将变成如下所示

修改脚本: 请复制并粘贴以下脚本和i。使用此脚本时,请选中“示例”页上“V”列的复选框

参考资料:
function installedOnEdit(e) {
  var range = e.range;
  if (range.getSheet().getName() != 'Example') { return; }
  if (range.columnStart == 22 && range.isChecked()) {
    var ss = e.source;
    var row = range.getRow();
    ss.getSheetByName("Email").getRange("M1").setValue(row);
    var details = row;
    var recipient = "youremail@example.com";
    var subject = "Example for the Number" && details;
    var body = "This is an example test";
    MailApp.sendEmail(recipient, subject, body);
  }
}