0

私は Google Apps Script/Javascript にかなり慣れていないので、これは本当に簡単な答えかもしれません。スプレッドシートで特定のセル値が変更されたときに、複数のメールを送信しようとしています。以下は私の作業コードです。onEdit を実行するように設定しました。ただし、シートのセルが変更されるたびに更新が送信されます。特定のセル (残高) が変更されたときに 1 つの電子メールを送信するだけです。

function sendUpdate() {
var recipients=["User1@gmail.com","User2@email.com"];
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get the range of cells that store balances
  var sslink = SpreadsheetApp.getActiveSpreadsheet().getUrl()
  var Balances = sheet.getRange("A28:C31").getValues();
  var User1Balance = Balances[2][2];
  var User2Balance = Balances[3][2]
  var User3Balance = Balances[0][2]
  var User4Balance = Balances[1][2]
  for (var i = 0; i < 2; i++) {

   GmailApp.sendEmail(recipients[i],
                     'Utilities Spreadsheet updated',
                      "This is an automated email generated from the utilities spreadsheet being updated. " +
                      "Current balances are: " +
                      "\n\n User1: " + User1Balance + "\n User2: " + User2Balance + "\n User3: " + User3Balance + "\n User4: " + User4Balance +
                      "\n\n Access the spreadsheet at: " + sslink);


  }
};

onOpen 関数を使用して初期値を読み込み、シートが編集されるたびにこれらの値を比較してみました。ただし、初期データを上記のメイン関数に渡す際に問題がありました。これについてのアドバイスは素晴らしいでしょう。グローバル変数を使えば簡単だと思いましたが、それが可能かどうかはわかりません。

4

1 に答える 1

0

あなたが提案するアプローチは少し複雑です。編集したセルがバランス範囲に含まれているかどうかを確認してみませんか?

を使用してrowIndexとcolumnIndexを取得し、getRow()これらgetColumn()の値をチェックして、アクティブなセル(変更されているセル)がこの範囲内にあるかどうかを確認できます。

多分そのような何か?

function sendUpdate() {
var recipients=["User1@gmail.com","User2@email.com"];
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get the range of cells that store balances
  var sslink = SpreadsheetApp.getActiveSpreadsheet().getUrl()
  var Balances = sheet.getRange("A28:C31").getValues();
  var User1Balance = Balances[2][2];
  var User2Balance = Balances[3][2]
  var User3Balance = Balances[0][2]
  var User4Balance = Balances[1][2]
  for (var i = 0; i < 2; i++) {
   var row = sheet.getActiveCell().getRow();
   var col = sheet.getActiveCell().getColumn();
    if(row>=28 && row<=31 && col<=3){

     GmailApp.sendEmail(recipients[i],
                     'Utilities Spreadsheet updated',
                      "This is an automated email generated from the utilities spreadsheet being updated. " +
                      "Current balances are: " +
                      "\n\n User1: " + User1Balance + "\n User2: " + User2Balance + "\n User3: " + User3Balance + "\n User4: " + User4Balance +
                      "\n\n Access the spreadsheet at: " + sslink);

    }
  }
};

注:私はテストしませんでしたが、アイデアは有効なようです...

もう 1 つのアプローチについては、グローバル変数 (すべての関数の外部で定義されている) を使用して、関数によるスクリプトの実行中に更新する直接的な方法はありません。関数が実行されたときの値を保持します。ただし、「永続ストレージ」を使用して値を保存することで、同じ動作を実現できます。たとえば、scriptProperties を使用します。あなたのバランス範囲はそれほど大きくないので、これは実装するのが非常に簡単かもしれません...しかし、私が提案した最初の解決策よりもはるかに複雑です. この道を進みたい場合は、必要に応じて遠慮なく助けを求めてください。

于 2013-03-11T22:02:15.087 に答える