谷歌工作表电子邮件onEdit触发器

时间:2017-10-02 23:56:05

标签: google-apps-script google-sheets

案例是我有一个谷歌工作表,它有一个被编辑的列和它旁边的3列,包括支票,电子邮件正文和电子邮件主题。 我制作了以下代码,以便在编辑列中编辑某个单元格时,会发送一封电子邮件进行通知。我将电子邮件放在代码中引用的列中。

function onEdit(e){

//Detecting the edited cell and fetching the values from the other columns
  var range = e.range;
  var check = range.offset(0,2).getValue()
  var serial = range.offset(0,-1).getValue()
  var email = range.offset(0,-8).getValue()
  var message = range.offset(0,3).getValue()
  var subject = range.offset(0,4).getValue()
  if (check == "SendEmail") { var email2 = email; }

//Checks to see if the code is running
      SpreadsheetApp.getActiveSpreadsheet().getRange('R1').setValue(email2)
      SpreadsheetApp.getActiveSpreadsheet().getRange('S1').setValue(check)

//Email part  
  var emailAddress = email2;
  MailApp.sendEmail(emailAddress, subject, message)


}

当我尝试使用没有编辑专长的功能时,会发送电子邮件。然而,当我重新打开onEdit时,它仍能正常工作,但不会发送任何电子邮件。

2 个答案:

答案 0 :(得分:2)

请确认是否已安装onEdit(e)作为触发器。使用MailApp.sendEmail()时,需要授权。因此,没有可安装触发器的onEdit(e)无法运行MailApp.sendEmail()。如何安装onEdit(e)作为触发器如下。

  • 在脚本编辑器上
  • 编辑 - >当前项目的触发器 - >点击此处立即添加一个。
  • 对于“运行”,设置“onEdit”
  • 对于“活动”,请设置“从电子表格”和“在线编辑”
  • 点击保存按钮

在此之后,请再试一次。

可安装触发器的详细信息为here

如果这没用,我很抱歉。

编辑:

这是确认正在运行MailApp.sendEmail()的示例。使用此功能时,请安装onEdit()作为触发器。

function onEdit() {
  MailApp.sendEmail("### your e-mail address ###", "Sample subject", "Sample body");
}

答案 1 :(得分:0)

您遇到了问题,因为您的函数名称与simple trigger函数的预期名称重叠 - 仅仅命名函数import UIKit var XX = 0 var YY = 0 class Segue: UIStoryboardSegue { let screenWidth = UIScreen.main.bounds.size.width let screenHeight = UIScreen.main.bounds.size.height var X = Int() var Y = Int() override func perform() { XX = X YY = Y openApp() } func openApp () { let sourceViewController = self.source let destinationViewController = self.destination sourceViewController.tabBarController?.tabBar.isHidden = true print("X: \(X),Y: \(Y)") destinationViewController.view.frame = CGRect(x: CGFloat(X), y: CGFloat(Y), width: screenWidth/1000, height: screenHeight/1000) destinationViewController.view.alpha = 0 sourceViewController.view.addSubview(destinationViewController.view) UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: { destinationViewController.view.alpha = 1 destinationViewController.view.frame = CGRect(x: 0, y: 0, width: self.screenWidth, height: self.screenHeight) }, completion: { success in sourceViewController.present(destinationViewController, animated: false, completion: nil) }) } } class UnwindSegue: UIStoryboardSegue { let screenWidth = UIScreen.main.bounds.size.width let screenHeight = UIScreen.main.bounds.size.height override func perform() { closeApp() } func closeApp () { let sourceViewController = self.source let destinationViewController = self.destination sourceViewController.view.superview?.insertSubview(destinationViewController.view, at: 0) UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: { sourceViewController.view.frame = CGRect(x: XX, y: YY, width: Int(self.screenWidth/1000), height: Int(self.screenHeight/1000)) }, completion: { success in sourceViewController.dismiss(animated: false, completion: nil) }) } } onOpen就足以使该函数在“简单”下运行触发“环境。

如果你将你的函数重命名为更相关的东西 - 例如onEdit,那么在编辑单元格之后它运行的唯一方法是通过installed trigger调用它 - 一个由一个人手动创建的用户或以编程方式。