我对if条件有一个令人头疼的时间。我将清楚说明这张纸是如何工作的。
当用户从E列,F列或G列的下拉菜单中选择一个值时,列H将更新为一个值。
它应该如何运作:
第1组 - 第E栏
第1组将选择"请求已发送"从下拉列表中。该脚本将执行setvalue" REQUEST_SENT"在H栏中。
第2组 - 第F栏
第2组将选择" Request Received"。该脚本将执行setvalue" REQUEST_RECEIVED"在H栏中。
第2组将选择"请求上传"。该脚本将执行setvalue" REQUEST_Uploading"在H栏中。
第2组将选择"上传已完成"。该脚本将执行setvalue" UPLOAD_COMPLETED"在H栏中。
第3组 - 第G栏
第2组将选择"请求转移"。该脚本将执行setvalue" REQUEST_TRANSFERRING"在H栏中。
第2组将选择"请求审核"。该脚本将执行setvalue" REQUEST_IN_REVIEW"在H栏中。
第2组将选择"请求审核完成"。该脚本将执行setvalue" REVIEW_COMPLETED"在H栏中。
第1组 - 第E栏
第1组将选择" Request Approved"或选择"请求被拒绝"从下拉列表中。该脚本将执行setvalue" REQUEST_APPROVED"或" REQUEST_REJECTED"在H栏中。
第2组 - 第F栏
如果第1组选择了#34;请求已批准"。第2组将选择" Burn in Progress"。该脚本将执行setvalue" BURN_IN_PROGRESS"在H栏中。
第2组将选择" Burn Completed"。该脚本将执行setvalue" BURN_COMPLETED"在H栏中。
第1组 - 第E栏
第1组将选择"请求发货"或者选择" Burn Rejected"从下拉列表中。该脚本将执行setvalue" REQUEST_SHIPPED"或者" BURN_REJECTED"在H栏中。
下面的脚本执行我想要的,但是当在E,F或G列中选择每个值时,H列值会根据E列或F列变为不同的值。
希望根据最后一列的选定值设置值。我已经考虑过为每个团队创建更新列,但这会使工作表更大。尽量保持表格紧凑。
此处代码
Team 1
var REQUEST_SENT = "REQUEST_SENT";
var REQUEST_APPROVED = "REQUEST_APPROVED";
var REQUEST_REJECTED = "REQUEST_REJECTED";
var REQUEST_SHIPPED = "REQUEST_SHIPPED";
var BURN_REJECTED = "BURN_REJECTED";
var REQUEST_CANCELLED = "REQUEST_CANCELLED";
//Team 2
var REQUEST_RECEIVED = "REQUEST_RECEIVED";
var REQUEST_TRANSFERRING = "REQUEST_TRANSFERRING";
var REQUEST_COMPLETED = "REQUEST_COMPLETED";
//Team 3
var REQUEST_IN_REVIEW = "REQUEST_IN_REVIEW";
var PM_REVIEW = "PM_REVIEW";
var REQUEST_TRANSFERRING = "REQUEST_TRANSFERRING";
var BURN_IN_PROGRESS = "BURN_IN_PROGRES";
var BURN_COMPLETED = "BURN_COMPLETED";
function pmSendEmails() {
var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var ss2 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
Logger.log('Sheet1: '+ss1.getSheetName());
Logger.log('Sheet2: '+ss2.getSheetName());
var startRow = 2;
var lastRow1 = ss1.getLastRow()-1;
var lastRow2 = ss2.getLastRow()-1;
var range1 = ss1.getRange(startRow, 1, lastRow1, 8);
var range2 = ss2.getRange(startRow, 1, lastRow2, 3);
var data1 = range1.getValues();
var data2 = range2.getValues();
var addresses = [];
for (var i = 0; i < data2.length; ++i){
var row2 = data2[i];
var cc = row2[1];
var replyTo = row2[2];
addresses.push([cc,replyTo])
}
var html;
for (var i = 0; i < data1.length; ++i){
var row1 = data1[i];
var projectName = row1[0];
var projectID = row1[1];
var projectManager = row1[2];
var dueDate = Utilities.formatDate(new Date(row1[3]), "America/New_York", "MMMM dd, yyyy");
var team1 = row1[4];
var team2 = row1[5];
var team3 = row1[6];
var status = row1[7];
}
这里我需要将if语句和条件放到更新列H
if (condition =="" && (condition !=)){
}
如果条件为真,也会执行以下代码。
var subject = "New DVD Request" + projectName + " ("+projectID+")";
var user = Session.getActiveUser().getEmail();
var timestamp = Utilities.formatDate(new Date(), "America/New_York", "MMMM dd, yyyy HH:mm");
var comments1 = ss1.getRange(startRow + i, 5).getNote();
comments1 = comments1 + "Request Sent:\n" + user + "\n" + timestamp + "\n";
var comments = ss1.getRange(startRow + i, 8).getNote();
comments = comments + "EMAIL_SENT:\n" + timestamp + "\n";
html = projectName+" "+projectID+" "+projectManager+" "+dueDate;
var setdata = ss1.getRange(startRow + i, 8).setValue(EMAIL_SENT).setNote(comments);
var team1Update = ss1.getRange(startRow + i, 5).setNote(comments1);
var optAdvancedArgs = {replyTo: replyTo, cc: user, name: "Venue Client Services"};
SpreadsheetApp.flush();
//MailApp.sendEmail(projectManager, subject, html, optAdvancedArgs);
如果您需要更多信息或说明,请与我们联系。任何帮助将非常感激。谢谢。
编辑12/4/14#1 我希望发生一些事情。每当使用E,F。G和H列的范围编辑单元格时,都会添加一个注释,其中包含活动用户的电子邮件地址和时间戳。在我之前的代码中,我能够通过以下代码实现此目的。
var user = Session.getActiveUser().getEmail();
var timestamp = Utilities.formatDate(new Date(), "America/New_York", "MMMM dd, yyyy HH:mm");
var comments1 = ss1.getRange(startRow + i, 5).getNote();
comments1 = comments1 + "Request Sent:\n" + user + "\n" + timestamp + "\n";
var comments = ss1.getRange(startRow + i, 8).getNote();
comments = comments + "EMAIL_SENT:\n" + timestamp + "\n";
var setdata = ss1.getRange(startRow + i, 8).setValue(EMAIL_SENT).setNote(comments);
var team1Update = ss1.getRange(startRow + i, 5).setNote(comments1);
comments1设置E,F,G列中拖放选择的注释,注释设置列H的注释。当我将上述代码放在当前的onEdit(e)脚本中时,没有任何反应。关于如何实现这一点的任何帮助。
编辑12/4/14#2 同样在前面的代码中,我能够根据E,F,G列中的下拉菜单选项发送电子邮件。因此,如果用户选择“请求已发送”,则会发送电子邮件。对于E,F,G列中的所有下拉菜单选项,都会重复此操作。有关如何为每个选择实现MailApp的任何帮助。
var html = projectName+" "+projectID+" "+projectManager+" "+dueDate;
var optAdvancedArgs = {replyTo: replyTo, cc: user, name: "Venue Client Services"};
MailApp.sendEmail(projectManager, subject, html, optAdvancedArgs);
答案 0 :(得分:1)
这对于Installable Edit Trigger函数来说是一个很好的应用程序。另见Google Sheets Events。
请注意,您必须使用可安装的触发器,该触发器将作为文档所有者运行,而不是以匿名用户身份运行的简单onEdit()
触发器,因为发送电子邮件需要用户授权。
像这样(测试过):
function installableOnEdit( e ) {
if (!e) throw new Error( "Need event parameter." ); // see http://stackoverflow.com/a/16089067
var changedCell = e.range;
var row = e.range.getRow();
var col = e.range.getColumn();
var sheet = e.range.getSheet();
var headers = sheet.getDataRange().getValues()[0]; // Get header row 1
var statusCol = headers.indexOf('Reminder Email Status')+1;
// Build an array of "rows we care about". If the headers change, this needs to be updated
var teamCols = [ headers.indexOf('Team 1 (PM)')+1,
headers.indexOf('Team 2 (Colombo)')+1,
headers.indexOf('Team 3 (VCS)')+1 ];
if (teamCols.indexOf(col) == -1) return; // Exit if cell outside of the team columns
var status = e.value.toUpperCase().replace(/ /g,"_"); // Change "Request Sent" to "REQUEST_SENT"
sheet.getRange(row,statusCol).setValue(status);
//--------- Put your emailing code here, or call a function
}
// Read user's current cell, and feed to installableOnEdit() as an event.
// see http://stackoverflow.com/a/16089067
function test_installableOnEdit() {
installableOnEdit({
user : Session.getActiveUser().getEmail(),
source : SpreadsheetApp.getActiveSpreadsheet(),
range : SpreadsheetApp.getActiveSpreadsheet().getActiveCell(),
value : SpreadsheetApp.getActiveSpreadsheet().getActiveCell().getValue(),
authMode : "LIMITED"
});
}