Для цикла и оператора if для нескольких условий
У меня есть время чесать голову с условиями если. Я поясню, как лист должен работать.
Когда пользователи выбирают значение из раскрывающихся меню в столбце E, столбце F или столбце G. Будет обновляться значение столбца H.
Как это должно работать:
Команда 1 - Колонна E
Команда 1 выберет "Запрос отправлен" из выпадающего списка. Сценарий выполнит заданное значение "REQUEST_SENT" в столбце H.
Команда 2 - Колонна F
Команда 2 выберет "Запрос получен". Сценарий выполнит заданное значение "REQUEST_RECEIVED" в столбце H.
Команда 2 выберет "Запрос загрузки". Сценарий выполнит заданное значение "REQUEST_Uploading" в столбце H.
Команда 2 выберет "Загрузка завершена". Сценарий выполнит заданное значение "UPLOAD_COMPLETED" в столбце H.
Команда 3 - Колонна G
Команда 2 выберет "Запрос на передачу". Сценарий выполнит заданное значение "REQUEST_TRANSFERRING" в столбце H.
Команда 2 выберет "Запрос в обзоре". Сценарий выполнит заданное значение "REQUEST_IN_REVIEW" в столбце H.
Команда 2 выберет "Запрос на проверку завершен". Сценарий выполнит заданное значение "REVIEW_COMPLETED" в столбце H.
Команда 1 - Колонна E
Команда 1 выберет "Запрос одобрен" или "Запрос отклонен" из выпадающего списка. Сценарий выполнит заданное значение "REQUEST_APPROVED" или "REQUEST_REJECTED" в столбце H.
Команда 2 - Колонна F
Если команда 1 выбрала "Запрос одобрен". Команда 2 выберет "Burn in Progress". Сценарий выполнит заданное значение "BURN_IN_PROGRESS" в столбце H.
Команда 2 выберет "Запись завершена". Сценарий выполнит заданное значение "BURN_COMPLETED" в столбце H.
Команда 1 - Колонна E
Команда 1 выберет "Запрос отправлен" или выберет "Отклонить запись" в раскрывающемся списке. Сценарий выполнит заданное значение "REQUEST_SHIPPED" или "BURN_REJECTED" в столбце H.
Сценарий ниже выполняет то, что я хочу, но когда каждое значение выбирается в столбце E, F или G, значение столбца H изменяется на другое значение в зависимости от столбца E или столбца F.
Хотелось бы, чтобы значение было установлено на основе выбранного значения последнего столбца. Я думал о создании столбцов обновления для каждой команды, но это сделает лист еще больше. Старайтесь держать лист компактным.
Вот таблица Google
Вот код
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);
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или разъяснения. Любая помощь приветствуется. Спасибо.
Редактировать 04.12.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), ничего не происходит. Любая помощь о том, как я могу это реализовать.
Edit 12/4/14 # 2 Также в предыдущем коде я смог отправить электронные письма на основе выпадающего меню в столбцах E, F, G. Поэтому, если пользователи выбирают Request Sent, электронное письмо отправляется. Это повторяется для всех пунктов раскрывающегося меню в столбцах 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);
1 ответ
Это было бы хорошим приложением для устанавливаемой функции редактирования запуска. Смотрите также Google Sheets Events.
Обратите внимание, что вы должны использовать устанавливаемый триггер, который будет работать как владелец документа, а не простойonEdit()
триггер, который запускается как анонимный пользователь, потому что отправка электронного письма требует авторизации пользователя.
Примерно так (проверено):
function installableOnEdit( e ) {
if (!e) throw new Error( "Need event parameter." ); // see http://stackru.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://stackru.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"
});
}