2016-04-20 5 views
0

基本的に私はトナー在庫管理シートを作成しています。在庫が1になると送信するメールがあります。これはインストール可能なonEditトリガーで行います(私は単純なonEdit機能を使用してログシート)。私の電子メールは正しく送信されますが、在庫が1になっていれば、別の在庫を編集するたびに電子メールが送られます。関連する在庫番号を含むセルが変更された場合にのみ電子メール機能を実行する方法はありますか?Google Script - 特定のセルが編集された場合にメールを自動的に送信する?

ここに私のコードはこの場合

function onEdit(event) { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = event.source.getActiveSheet(); 
    var r = event.source.getActiveRange(); 

    if(s.getName() == "Toners" && r.getColumn() == 5 && r.getValue() > "") { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Log"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).moveTo(target); 
    s.deleteRow(row); 
    } 
} 

//I included the above code just in case someone finds an easier way to put it in there and then call the EmailPrinterGroup1 functon.. 




function EmailPrinterGroup1() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var PrinterGroupStock = ss.getSheetByName("Notification").getRange("B1").getValue(); 
    var EmailList = ["[email protected]"]; 
    if(PrinterGroupStock <= 1){ 
     var email = Session.getActiveUser().getEmail(); 
     GmailApp.sendEmail(EmailList, 'Toner Stock Alert - Communal Areas', 
         'There is only 1 toner left in stock for the communal areas, please re-stock ASAP. Click the link below to go to the Toner Stock Management sheet. \n\n'+ss.getUrl(), 
         {from:"[email protected]"}); 
     PropertiesService.getScriptProperties().setProperty("last", PrinterGroupStock); 
    } 
} 

だ、私がチェックしたいセルがCOUNTIF式(計算の結果が1である場合に電子メールが送信されます)を使用した、B1あり、そしてそれは上です"通知"シート(最も編集されるメインシートページは "トナー"と呼ばれます。)ありがとう!

答えて

0

シート内のセルを使用して、B1の値が前に1だったことを記憶するフラグを格納できます。次の例では、A1を使用しています。

function onEdit(event) { 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = event.source.getActiveSheet(); 
    var r = event.source.getActiveRange(); 

    if(s.getName() == "Toners" && r.getColumn() == 5 && r.getValue() > "") { 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName("Log"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).moveTo(target); 
    s.deleteRow(row); 
    } 

    var stock_range = ss.getSheetByName("Notification").getRange(1, 2); 
    var stock_is_one_flag = ss.getSheetByName("Notification").getRange(1, 1).getValue(); 

    if (stock_range.getValue() === 1 && stock_is_one_flag === 0){ 
    EmailPrinterGroup1(); 
    ss.getSheetByName("Notification").getRange(1, 1).setValue(1); 
    } else if (stock_range.getValue() != 1 && stock_is_one_flag != 0){ 
    EmailPrinterGroup1(); 
    ss.getSheetByName("Notification").getRange(1, 1).setValue(0); 
    } 
} 
+0

@Celias:この回答は役に立ちましたか?必要な説明がありますか? –

+0

返事をいただきありがとうございます。私はあなたの例でコードを使用し、それを私のものに適用しようとしましたが、うまくいきませんでした。電子メールはすべての編集を送信します...私のスプレッドシートのコピーへのリンクその周りに遊ぶ):[リンク](https://docs.google.com/spreadsheets/d/10F0rtPbh_RbVMi2rKUhtgK5kjEYKN_6Onn6SgqIQVdY/edit?usp=sharing) – Celias

+0

@Celias:それは私のために働いています。テストのために、メール送信部を削除し、セル「B1」にメモを設定しました。共有したシートで試してみることができます。 –

関連する問題