我希望你能帮忙,我在谷歌里有一个电子表格,可以跟踪新的请求,当请求者将单元格更改为yes时,第一个scrip会发送一封电子邮件,通知审批者一个新请求,还会向管理员发送一份副本。
在批准时,批准者可以将另一个单元格设置为"是",这会触发向高级管理员发送第二封电子邮件,以确认更改已被批准,并确认现在可以执行操作。
我已经让两份草稿独立工作,但我无法让它们在同一个项目中工作,你能建议实现这一目标的最佳方式吗?
这是我的批准er代码
var admin_email='admin@myemail.com'; //<- update your email address here
function triggerOnEdit(e)
{
sendEmailOnApproval(e);
}
function showMessageOnApproval(e)
{
var edited_row = checkStatusIsApproved(e);
if(edited_row > 0)
{
SpreadsheetApp.getUi().alert("Row # "+edited_row+" Yes!");
}
}
function showMessageOnUpdate(e)
{
var range = e.range;
SpreadsheetApp.getUi().alert("range updated " + range.getA1Notation());
}
function checkStatusIsApproved(e)
{
var range = e.range;
if(range.getColumn() <= 9 &&
range.getLastColumn() >=9 )
{
var edited_row = range.getRow();
var status = SpreadsheetApp.getActiveSheet().getRange(edited_row,9).getValue();
if(status == 'Yes')
{
return edited_row;
}
}
return 0;
}
function sendEmailOnApproval(e)
{
var approved_row = checkStatusIsApproved(e);
if(approved_row <= 0)
{
return;
}
sendEmailByRow(approved_row);
}
function sendEmailByRow(row)
{
var values = SpreadsheetApp.getActiveSheet().getRange(row,1,row,4).getValues();
var row_values = values[0];
var mail = composeApprovedEmail(row_values);
//Uncomment this line for testing
//SpreadsheetApp.getUi().alert(" subject is "+mail.subject+"n message "+mail.message);
MailApp.sendEmail(admin_email,mail.subject,mail.message);
var candidate_email = composeCandidateEmail(row_values);
MailApp.sendEmail(candidate_email.email,candidate_email.subject,candidate_email.message);
}
function composeApprovedEmail(row_values)
{
var first_name = row_values[0];
var last_name = row_values[1];
var email = row_values[2];
var message = "A new Post 16 Request has been log by: "+first_name+ "nhttps://docs.google.com/spreadsheets/d/15a1f2GJMOSHQop3vdmGS8eH9-Uq_9KFD1sY7S_8Dhaw/edit?usp=sharing";
var subject = "New Post 16 Change Request ";
return({message:message,subject:subject});
}
function composeCandidateEmail(row_values)
{
var first_name = row_values[1];
var last_name = row_values[0];
var email = row_values[2];
var subject = "New Post 16 Change Request";
var message = "Dear "+first_name+"nn"+
"A new request has been logged on the Post 16 Change Log by "+last_name+".nnPlease can you approve this request and update the Post 16 Database if required.nnnRegardsnnThe Data Teamn";
//... etc
return({message:message,subject:subject, email:email });
}
这是第二个代码。
var admin_email='Admin@my.com'; //<- update your email address here
function triggerOnEdit(e)
{
sendEmailOnApproval(e);
}
function showMessageOnApproval(e)
{
var edited_row = checkStatusIsApproved(e);
if(edited_row > 0)
{
SpreadsheetApp.getUi().alert("Row # "+edited_row+" Yes!");
}
}
function showMessageOnUpdate(e)
{
var range = e.range;
SpreadsheetApp.getUi().alert("range updated " + range.getA1Notation());
}
function checkStatusIsApproved(e)
{
var range = e.range;
if(range.getColumn() <= 11 &&
range.getLastColumn() >=11 )
{
var edited_row = range.getRow();
var status = SpreadsheetApp.getActiveSheet().getRange(edited_row,11).getValue();
if(status == 'Yes')
{
return edited_row;
}
}
return 0;
}
function sendEmailOnApproval(e)
{
var approved_row = checkStatusIsApproved(e);
if(approved_row <= 0)
{
return;
}
sendEmailByRow(approved_row);
}
function sendEmailByRow(row)
{
var values = SpreadsheetApp.getActiveSheet().getRange(row,1,row,4).getValues();
var row_values = values[0];
var mail = composeApprovedEmail(row_values);
//Uncomment this line for testing
//SpreadsheetApp.getUi().alert(" subject is "+mail.subject+"n message "+mail.message);
MailApp.sendEmail(admin_email,mail.subject,mail.message);
}
function composeApprovedEmail(row_values)
{
var first_name = row_values[0];
var last_name = row_values[1];
var email = row_values[2];
var message = "A new Post 16 Request has been log by: "+first_name+ " and the Post 16 Database has been updated. nnCan you please confirm that his is the case and update the change log.";
var subject = "New Post 16 Change Request | Database updated ";
return({message:message,subject:subject});
}
答案:
您可以检查哪个单元格已被编辑,并根据该单元格运行函数
代码示例:
您将希望使用绑定到工作表的onEdit(e)
简单触发函数,并且只有在编辑了正确的单元格时才运行相应的代码:
function onEdit(e) {
const cellForEditRequest = "C8" // for example
const cellForApproverEdit = "D8" // for example
const editedCell = e.range.getA1Notation()
if (editedCell == cellForEditRequest) {
// edit request code
}
else if (editedCell == cellForApproverEdit) {
// administrator email code
}
}
记住:
- 您需要确保所有函数都在同一个文件中
- 您需要确保所有函数都有不同的名称
- 您需要在
onEdit()
函数的前两行中设置要检查的单元格 - 您需要将其作为可安装的触发器,因为需要授权的方法(例如发送电子邮件(不能通过简单的触发器运行
参考文献:
- 可安装触发器|应用程序脚本|谷歌开发者