web-dev-qa-db-ja.com

セルが変更された場合の電子メール通知

グーグルスクリプトの助けが必要です。複数の行があります スプレッドシート

次のことを行うスクリプトが必要です:

列Gのいずれかのセルが変更されている場合は、この行の情報(セルDの情報とセルGの新しい値)を含む電子メール通知をカスタムアドレスに送信します。

[〜#〜] upd [〜#〜]

私は有用な情報を見つけました:

function emailNotification() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = ss.getActiveCell().getA1Notation();
  var cellvalue = ss.getActiveCell().getValue().toString();
  var recipient = "[email protected]";
  var subject = 'Update to '+sheet.getName();
  var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on cell: «' + cell + '» New cell value: «' + cellvalue + '»';
  MailApp.sendEmail(recipient, subject, body);
};

このスクリプトは、テーブル全体の変更を追跡します。そして、列Gでのみ変更を追跡し、列Dから値を取得したいと思います。

質問:

値が列Gのセルを変更したときに、列Dのセルの値を取得する方法

最後にスクリプト—私の質問への回答

スプレッドシート

function sendNotification() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = ss.getActiveCell().getA1Notation();
  var row = sheet.getActiveRange().getRow();
  var cellvalue = ss.getActiveCell().getValue().toString();
  var recipients = "[email protected]";
  var message = '';
  if(cell.indexOf('G')!=-1){ 
    message = sheet.getRange('D'+ sheet.getActiveCell().getRowIndex()).getValue()
  }
  var subject = 'Update to '+sheet.getName();
  var body = sheet.getName() + ' has been updated. Visit ' + ss.getUrl() + ' to view the changes on row: «' + row + '». New comment: «' + cellvalue + '». For message: «' + message + '»';
  MailApp.sendEmail(recipients, subject, body);
};

OnEditにトリガーを設定すると、スクリプトは正常に機能します

8
v2p

質問を投稿する前に、このフォーラムを検索する必要があります。 email + cellで検索したところ、いくつかの結果が得られました:

たとえば、 この投稿の回答 はほぼ正確にあなたがやりたいことをします。

あなたの編集に続いて編集:

IF条件を使用します。

このようなもの :

    var cellG = ''
    if(cell.indexOf('D')!=-1){ // = if you edit data in col D
cellG = sheet.getRange('G'+ sheet.getActiveCell().getRowIndex()).getValue()
// add more condition if necessary and/or send your mail (cellG contains the value in column G of the active row
}
    Logger.log(cellG)
6
Serge insas

セル変更イベントを追跡する正しい方法は、onEditトリガーでイベントオブジェクト「e」を使用することです。イベントオブジェクトには編集された範囲が含まれているため、変更されたセルのコンテンツをいつでも取得できます。

function sendNotification(e){
  var range = e.range;
  range.setNote('Last modified: ' + new Date());
}

注:関数名は、appsスクリプトの特別な名前であるonEditであってはなりません。 onEdit関数は、[〜#〜]制限付き[〜#〜]authModeのため、電子メールの送信を許可しません。

これがappsスクリプトです セル​​が特定の範囲で編集された場合にメールを送信できるようにします。また、通知メールで送信する行全体、列全体、またはカスタム範囲を送信することもできます。

1
Hari Das