案例是我有一个谷歌工作表,它有一个被编辑的列和它旁边的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时,它仍能正常工作,但不会发送任何电子邮件。
答案 0 :(得分:2)
请确认是否已安装onEdit(e)
作为触发器。使用MailApp.sendEmail()
时,需要授权。因此,没有可安装触发器的onEdit(e)
无法运行MailApp.sendEmail()
。如何安装onEdit(e)
作为触发器如下。
在此之后,请再试一次。
可安装触发器的详细信息为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调用它 - 一个由一个人手动创建的用户或以编程方式。