2016-06-16 134 views
0

我工作的一个相当简单的脚本应该处理电子表格中的新值,然后发送电子邮件到指定的地址。我面临这个问题。我的代码如下:自动发送电子邮件有关编辑电子表格谷歌

function onEdit(e) { 
    //part of the code for checking e.range to process only updated values 
    sendEmail(); 
} 
function sendEmail() { 
    // arguments are missed only for demo 
    GmailApp.sendEmail(); 
} 

虽然我使用的是“简单的扳机”,我的功能“sendEmail()”的作品只有当我从脚本编辑器中启动它。我允许代表我第一时间发送电子邮件,然后功能正常工作。但是,如果我要更改电子表格中的值 - 函数“onEdit(e)”会处理新数据,但函数“sendEmail()”不会执行任何操作。

我部分通过项目的触发器从“当前项目的触发器”菜单解决了这个问题。在这种情况下,函数“sendEmail()”正常工作,但我无法访问有关更新的信息。 为了我的目的,我可以使用第二种方式,每次都可以“手动”查找新值,但我希望优化这项工作。

所以,我的问题是:

  1. 是我上面描述正确的过程或我犯了一个错误 地方?
  2. 如果处理本身,就是一种方法,这两种情况结合起来?

谢谢!

+0

非常感谢你 - 我的文档中错过了这个。问题解决了) – NoisyFlasher

+0

@soup也许你会重新发布你的评论作为答案,我会将这个问题标记为答案? – NoisyFlasher

回答

0

你正确地理解了(as the docs say)简单的触发器也不能发送电子邮件,因为它们运行未经授权。通过资源菜单创建的installable trigger可以:它与创建触发器的用户具有相同的权限。如果它被设置为在编辑时触发,它将获得与简单触发器相同类型的event object

所以,一个最小的例子是这样的,设置为“上编辑”运行:

function sendMail(e) { 
    MailApp.sendEmail('[email protected]', 'sheet edited', JSON.stringify(e)); 
} 

它的电子邮件JSON格式的整个事件对象。

旁白:如果你的脚本只需要发送电子邮件,但是不能读取,使用MailApp代替GmailApp保持权限更窄的范围。

相关问题