2015-01-31 68 views
0

我需要的代码将发送电子邮件到一些谷歌邮件帐户,只要有一些数据输入到谷歌电子表格。如果可能的话,我还需要以电子邮件形式呈现数据。电子邮件提醒输入数据到谷歌电子表格不起作用

我已经找到了我的问题在这里How to put a username to the cell , who made the last modification of the row?

的答案,但这个代码出于某种原因没有为我工作。

1我打开谷歌电子表格的脚本编辑器并粘贴代码

2更改电子邮件地址,以适当的一些

3问我授权

4然后,当我输入一些数据在谷歌电子表格中,我有显示 通知,但没有电子邮件

其实有时我收到电子邮件,但并不总是,我不明白为什么它以前工作,因为我没有ch任何东西。

我试图用新的代码创建新的电子表格,但电子邮件通知仍然不起作用。

我查了postini电子邮件防火墙,很明显 - 没有邮件,垃圾邮件文件夹也很清晰。

网上绝对没有关于如何发送电子邮件的数据输入到Google电子表格的简单教程,除了我在开始时发布的问题。

这里是我使用的代码:

function onEdit(event){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = event.source.getActiveSheet(); 
    var r = event.source.getActiveRange(); 
    r.setComment("Last modified: " + (new Date())+' by '+Session.getActiveUser()); 
    ss.toast('Dernière cellule modifiée = '+r.getA1Notation()+' par '+Session.getActiveUser()); 
} 

function alert(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var cell = ss.getActiveCell().getA1Notation() 
     if(Session.getActiveUser()!='[email protected]'){ 
    MailApp.sendEmail('[email protected]', 'Modification dans le planning', 'la case '+cell+' du document a été modifiée par '+Session.getActiveUser()); 
} 
} 

谢谢您的时间和答案。

编辑

经过一番深入调查我写了这个代码。它发送电子邮件,但由于某种原因,电子邮件中没有user.id,只有cell.id。

function sendSimpleTextEmail() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var cell = ss.getActiveCell().getA1Notation(); 
var user = Session.getActiveUser(); 
MailApp.sendEmail('[email protected]',user,cell); 
} 

回答

0

我对Javascript并不是很熟练,但只是介绍了显而易见的内容。

当您测试您的脚本时,您是否使用其他帐号而不是您在脚本中输入的更改中的帐号?

我假设您已将[email protected]更改为您的电子邮件?

if(Session.getActiveUser()!='[email protected]') 

该部分代码说,如果用户登录ISNT这封电子邮件,然后通过下一位发送邮件判断。

所以测试时,使用未[email protected]

编辑 应该读过原著海报质疑更多的帐户。

所以在正确阅读代码后。除非我真的弄错了,理想情况下你应该只有一个编辑脚本。

而OP所需的脚本部分不在on编辑触发器上,它只是一个函数。代码的编辑部分只是将注释添加到工作表。所以,也许对于OP一个更好的答案是把alert()功能在onEdit()功能

喜欢的东西

function onEdit(event){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var cell = ss.getActiveCell().getA1Notation(); 
     if(Session.getActiveUser()!='[email protected]'){ 
    MailApp.sendEmail('[email protected]', 'Modification dans le planning', 'la case '+cell+' du document a été modifiée par '+Session.getActiveUser()); 
}  
} 

这是未经测试的方式,只是希望能帮助你走上正轨

+0

Munkey,谢谢你的回答。我现在完全失去了,不确定这个代码是我需要的。我只需要输入或编辑单元格中的数据时将发送电子邮件的代码。回答你的问题 - 是的,我换了另一封电子邮件。 – Link 2015-01-31 22:05:31

+0

再次感谢您的回答。此代码仅在[email protected]登录时发送user.id,如果其他用户登录,则发送电子邮件,但不包含user.id,他在电子表格中进行更改。我需要知道谁在电子表格中进行了更改,还需要在电子邮件中更改单元格中的数据。真的很抱歉,第一次没有正确澄清它。现在我发现我发现的代码远没有我需要。 – Link 2015-02-01 10:03:23

+0

经过一番阅读后,我不确定你可以发送电子邮件时触发onEdit。 试图想出一个解决方法。 此外,如果您已经与任何人共享了工作表,并且链接可以查看/修改,那么他们就不需要登录进行修改。 所以不会有用户名或电子邮件发送给你自己。只是一个想法 – Munkey 2015-02-01 12:33:52

1

我终于设法使其工作

的代码是:

function sendSimpleTextEmail() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
Logger.log(ss); 
var name = ss.getName(); 
Logger.log(name); 
var url = ss.getUrl(); 
Logger.log(url); 
var cell = ss.getActiveCell().getA1Notation(); 
Logger.log(cell); 
var result = ss.getActiveCell().getValue(); 
Logger.log(result); 
var email = Session.getActiveUser().getEmail(); 
Logger.log(email); 
MailApp.sendEmail('[email protected]','Data was changed in a spreadsheet `' +name+ '` in a cell ' +cell+ ' by user ' +email+ ' New Data=`' +result+ '`','Data was changed in a spreadsheet `' +name+ '` in a cell ' +cell+ ' by user ' +email+ ' New Data=`' +result+ '` Spreadsheet URL is ' +url); 
} 

创建此脚本后,您需要通过按配置手动触发器当前项目的触发器按钮。您只需要开启编辑触发器。

备注1 - 在变革与安编辑区别触发: 当用户在电子表格中修改的值可安装编辑触发运行。 当用户修改电子表格本身的结构时(例如,通过添加新工作表或删除列),可以安装更改触发器。更多信息https://developers.google.com/apps-script/guides/triggers/installable

备注2 - Session.getActiveUser().getEmail()仅适用于GoogleApps域。如果我与域外的任何人共享电子表格 - 它将返回空字符串。

编辑:打错

+0

干得好,很高兴你把它全部排序:) – Munkey 2015-02-07 17:47:10

+0

是否有可能获得以前的值,意味着编辑值之前 – 2016-08-26 09:43:03