Google应用脚本 - 编辑后比较范围的初始值

时间:2013-03-11 21:39:15

标签: google-apps-script

我对Google Apps脚本/ Javascript很陌生,所以这可能是一个非常简单的答案。我在电子表格中更改某些单元格值时尝试发送多封电子邮件。以下是我的工作代码。我有这个设置运行onEdit。但是,它会在工作表上的单元格被修改时发送更新,我只想在修改某些单元格(余额)时发送一封电子邮件。

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函数读取初始值,然后在每次编辑工作表时比较这些值。但是,我在将初始数据传递到上面的main函数时遇到了一些问题。关于如何解决这个问题的任何建议都会很棒。我认为使用全局变量很容易,但不确定是否可能。

1 个答案:

答案 0 :(得分:0)

您建议的方法有点复杂,为什么不简单地检查编辑的单元格是否包含在您的余额范围内?

您可以使用getRow()getColumn()获取rowIndex和columnIndex,只需检查这些值以查看活动单元格(正在修改的单元格)是否在此范围内。

这样的事可能吗?

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);

    }
  }
};

注意:我没有测试,但这个想法似乎是有效的......

对于另一种方法,没有直接的方法可以在函数的脚本执行期间更新全局变量(在所有函数之外定义)。它们将保留执行函数时的值。但是,使用“永久存储”来存储值可以实现相同的行为,例如使用scriptProperties。 由于你的平衡范围不是太大,这可能很容易实现......但仍然比我建议的第一个解决方案复杂得多。如果你想这样,如果需要,请随时寻求帮助。