2015-01-31 11 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