Итак, я столкнулся с проблемой, которая выглядит либо сбойной, либо просто ошибочной, и был бы очень признателен за решение или любую обратную связь!
Это для праздничного листа. В столбце A у вас есть имя, в столбце B - дата начала, а в столбце C - дата окончания. Чтобы позволить менеджерам утвердить или отклонить выходной, существует четвертый столбец, в котором находится проверка данных. Параметры проверки данных: «Одобрено» или «Отклонено». После утверждения выходной перейдет на вкладку «Утверждено», чтобы перенести его в календарь с помощью другого сценария. Если он отклонен, он переходит на вкладку «Отклонено» и уведомляет запрашивающую сторону о том, что отпуск был отклонен. Если оставить это поле пустым, он просто останется на этом нейтральном листе.
Однако проблема заключается в том, что когда менеджер утверждает выходной, иногда сценарий берет нижний ряд с ним при переходе к «Утверждено» или «Утверждено». Отклоненные вкладки, и это вызывает много путаницы . К счастью, автоматизация, основанная на листе «Утверждено», перемещает праздник в календарь только тогда, когда в четвертом столбце написано «Утверждено». Но мне действительно нужно исправить, и я не уверен, как это сделать.
Сценарий, который я использую для перемещения строки на вкладку:
function onEdit(event) {
// assumes source data in sheet named main
// target sheet of move to named Completed
// getColumn with check-boxes is currently set to column 4 or D
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Submitted" && r.getColumn() == 11 && r.getValue() == "Approved") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Approved");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
} else if(s.getName() == "Submitted" && r.getColumn() == 11 && r.getValue() == "Declined") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Declined");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
Этот скрипт был замечен в https://support.google.com/docs/thread/24467278?hl=en но я немного убрал его, чтобы удовлетворить валидации.
Любая помощь была бы действительно просто потрясающей! Я давно искал в Stack, Reddit и на форумах Google и не могу найти ничего, что относится к этой проблеме.