我对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函数时遇到了一些问题。关于如何解决这个问题的任何建议都会很棒。我认为使用全局变量很容易,但不确定是否可能。
答案 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。 由于你的平衡范围不是太大,这可能很容易实现......但仍然比我建议的第一个解决方案复杂得多。如果你想这样,如果需要,请随时寻求帮助。