1

當電子表格被修改或添加任何數據時,我在Google Spreadsheet上有書面腳本發送電子郵件。電子郵件觸發器正在工作,但每當在下一行輸入任何數據時,它也會將電子郵件發送到以前的電子郵件地址電子表格電子郵件觸發器

請建議的解決方案

下面寫的腳本:

function onEdit(e) { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 2; // First row of data to process 
    var numRows = 1; // Number of rows to process 
    var dataRange = sheet.getRange(startRow, 1 , numRows,3) // Fetch the range of cells A2:B3 

    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 
for (i in data) { 
    var row = data[i]; 
    var emailAddress = row[2]; // First column 
    var message = row[0] + "requested" + row [1];  // Second column 
    var subject = "Sending emails from a Spreadsheet"; 
    MailApp.sendEmail(emailAddress, subject, message); 
    } 
} 
+0

OnEdit不是要走的路。只有在從代碼編輯器運行時,onEdit觸發器纔會發送電子郵件,如果它是由電子表格中的更改觸發的。此外,如果確實發送了電子郵件,它會爲您更改的每個單元發送一個。如果在該行中輸入三個項目,則每行最少嘗試三次。您應該創建一個按鈕或菜單項,在完成該行後可以單擊該按鈕或菜單項以發送該行的電子郵件。 – ScampMichael

+0

沒關係。謝謝 – RohanBhavsar

回答

0

你的問題不清楚......無處在腳本中,我看到的東西,讀哪個小區實際修改...你的目標範圍第2行硬編碼,這樣可以處理的唯一行爲行2(和郵件只能發送一次)......

所以你:

  • 解釋它是如何工作
  • 解釋它是如何工作的,現在,特別是你所說的「以前的電子郵件」的意思是
  • 刪除輸入錯誤代碼(行[2]不是第一列)
  • 解釋如何你觸發這個函數:名字onEdit(e)建議onEdit觸發器,但簡單的觸發器不能發送郵件,所以我想你已經設置了一些其他的觸發器。
  • 解釋爲什麼(e)在你的函數參數中並沒有使用它?

編輯:感謝信息的補充。 你建議的腳本不足以實現你想要的。這裏的想法是通過添加(或插入)一行數據或(如果我理解的很好)編輯工作表中的任何行用新值修改了工作表中的某些內容。

這是不是真的那麼簡單,因爲它看起來第一眼;-)

我會做什麼它採取板的「快照」和基礎的一個timeronEdit - 比較該快照到表格的當前狀態。

還有就是要得到這一結果不止一種方法,你可以在你的電子表格中的第二層,沒有人能夠改變的,那就是你每次修改/郵件發送後更新主表的副本。因此,在更新腳本之前,應查找表單之間的差異,並在發現差異時向相應的電子郵件發送報告。

另一種方法是將轉換爲字符串的工作表數據存儲在腳本屬性中,原理相同,但對於訪問電子表格的普通用戶來說,它更加「隱形」。

您也可以使用scriptDb或您的userproperties,但腳本屬性可能更適合(更簡單)此用例。

告訴我們您的想法/偏好,我(或其他人)可能會給你一些代碼開始。

+0

嗨嗶謝謝你的指示。請參閱下面的鏈接,我已經分享瞭解釋我的整個劇本情景。 https://docs.google.com/document/d/1rqFRYgWgnWf414IxizSe6p-RuOGgs5NwwVbWoFgmqlQ/edit – RohanBhavsar

1

您似乎在使用共享電子表格收集添加用戶請求,並信任請求者填寫信息。在您分享的詳細文檔中,進一步顯示請求已被添加,但未被編輯。 (這是一個重要的簡化區分。)

我建議您真正需要的是使用表單來接收該輸入。使用表單將在您的電子表格中創建一個「數據表」,這是您不能混淆的一組列。 (您可以編輯內容,添加和刪除行,但不能添加或刪除列)。但是,您可以在此表格外添加列,這爲您提供了一個方便的地方來存儲有關個人狀態的狀態信息要求。

Example sheet

此外,你可以觸發你的處理上運行的形式提交,而不是簡單的「onEdit」 - 這從ScampMichael指出問題後逃脫。或者,您可以使用可安裝的編輯觸發器,如in this answer所述。

嘗試this sheetthis form。保存一份副本,進入腳本並刪除阻止發送電子郵件的評論,然後嘗試一下。電子表格中有一個菜單項可以啓動處理;只需清除「請求狀態」列即可重新運行它。您可以打開表單(並找到其URL),並添加更多條目以進行實驗。

這是我編寫的類似系統的核心,它包含一個用於處理請求的謹慎狀態機。我的系統在多個電子表格中有大量非常複雜的數據,因此它經常被搶佔,然後需要再次運行。 (我爲此使用了一個定時觸發器。)這就是爲什麼請求通過狀態來處理的原因。如果您發現太複雜,請拔出您需要的部件。