我对编写应用程序脚本完全陌生。一直试图在网上找到我的问题的答案,但不幸的是没有成功。因此,我正在向社区寻求帮助。
在我的 g 表中,我有两个选项卡,一个是输入选项卡 (X),另一个是输出选项卡 (Y)。我想要完成的是每次在输出选项卡(Y)中编辑单元格时向给定的电子邮件地址发送电子邮件通知。输出选项卡的可编辑范围为 B2:Y61。我在网上找到了很多关于“编辑”功能的东西。然而,它们中没有一个与我的示例接近,主要是因为它们引用的是 getActivetSheet 而不是特定的一个。代码越简单越好。
例如,我发现以下帖子非常有趣。不幸的是,不知道如何使其与特定的选项卡名称一起使用。此外,如果完全复制并粘贴,公式将返回错误,即尚未声明该行引用。
https://spreadsheet.dev/send-email-when-google-sheet-is-edited
期待您的来信!
最好的, D
您可以使用这个:
function onEdit(e) {
var editedSheet = e.source.getActiveSheet();
var editedCell = e.range;
var row = editedCell.getRow();
var col = editedCell.getColumn();
//Check if B2:Y61 was modified in Sheet "Y" based on its row and column index
if(row>=2 && row<=61 && col>=2 && col<=25 && editedSheet.getName()=="Y"){
//Send email
var subject = "Sheet: "+editedSheet.getName();
var message = "Cell "+editedCell.getA1Notation()+" was modified from '"+e.oldvalue+"' to '"+e.value+"'";
MailApp.sendEmail("email address",subject,message);
}
}
它有什么作用?
e.source
获取正在修改的活动工作表,使用 e.range
获取正在修改的单元格,甚至使用 e.oldValue
获取单元格的旧值和新值, e.value
B2:Y61
,其中应该有min row = 2,max row = 61,min col = 2和 max col = 25 并且工作表名称应为“Y”。注:
您需要将其创建为可安装的触发器,因为它将使用需要身份验证的邮件服务。
要在脚本编辑器中手动创建可安装的触发器,请按照以下步骤操作:
此代码会将 X_input 表中所做的更改复制到 Y_input 表,并检查修改 B2:Y61 范围时是否应发送电子邮件。
function onEdit(e) {
var editedSheet = e.source.getActiveSheet();
var editedCell = e.range;
var row = editedCell.getRow();
var col = editedCell.getColumn();
var ySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Y_output");
//Check if edit is done in Sheet "X_input"
if(editedSheet.getName()=="X_input"){
//copy modified cell to Y_output sheet
ySheet.getRange(row,col).setValue(e.value);
//check if modified cell is within B2:Y61 range and send an email
if(row>=2 && row<=61 && col>=2 && col<=25){
//Send email
var subject = "Sheet: "+editedSheet.getName();
var message = "Cell "+editedCell.getA1Notation()+" was modified from '"+e.oldvalue+"' to '"+e.value+"'";
MailApp.sendEmail("[email protected]",subject,message);
}
}
}