Триггер onEdit(e): всплывающее окно с предупреждением, при изменении любой ячейки в столбце
Всем, здравствуйте.
Нужно, чтобы при изменении любой ячейки в столбце "Е" на "Включено", если в этой строке пустая ячейка "В" и "С" или "D"— всплывало окно с предупреждением с кнопкой "ОК".
То есть, статус "Включено" разрешен, если в строке заполнены: 1)"B,C"; 2)"B,D"; 3)"B,C,D".
Строк на листе со временем будет более тысячи.
Попытался написать скрипт, но ничего не выходит. 
function onEdit(e){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Лист1')
var cellIvalue = sheet.getRange('E2:E').getValue();
var cellBvalue = sheet.getRange('B2:B').getValue();
var cellCvalue = sheet.getRange('C2:C').getValue();
var cellDvalue = sheet.getRange('D2:D').getValue();
if (cellIvalue == 'Включено'&& cellBvalue.CELL_EMPTY)
{
var ui = SpreadsheetApp.getUi();
var message = ui.alert(
'Alert text"',
ui.ButtonSet.OK);
}
}
Ответы (1 шт):
Автор решения: Артур Петров
→ Ссылка
Выкладываю, два варианта скрипта. Делают одно и тоже, но реализация разная. Спасибо ребятам с англ. ветки форума, за помощь. Код, который я пытался написать, это конечно вообще жесть.
1 вариант.
function onEdit(e) {
const row = e.range.getRow();
const col = e.range.getColumn();
const as = e.source.getActiveSheet();
const ui = SpreadsheetApp.getUi();
if(as.getName() == 'Лист1' && col == 5 && row > 2 && e.range.getValue() == 'Enable'){
if(as.getRange(row,2).isBlank() && as.getRange(row,3).isBlank() && as.getRange(row,4).isBlank() ){
var message = "Enter data into the cell:\n 'Start date'\n and\n 'Expiration date' or 'Amount'";
}
else if (as.getRange(row,2).isBlank() && (!as.getRange(row,3).isBlank() || !as.getRange(row,4).isBlank()) ){
var message = "Enter data into the cell:\n 'Start date'";
}
else if (!as.getRange(row,2).isBlank() && as.getRange(row,3).isBlank() && as.getRange(row,4).isBlank()){
var message = "Enter data into the cell:\n 'Expiration date' or 'Amount'";
}
if(message){
ui.alert(message, ui.ButtonSet.OK);
as.getRange(row,col).clearContent();
}
}
}
2 вариант
'use strict';
/**
* @param {GoogleAppsScript.Events.SheetsOnEdit} param1
*/
function onEdit({
value: v,
range: { rowStart: r, columnStart: c },
range: rg,
}) {
/*Exit code*/
if (
v !== 'Enable' ||
r < 2 ||
c !== 5 ||
rg.getSheet().getName() !== 'Sheet1'
)
return;
const [[startDate, expirationDt, amount]] = rg
.offset(0, -3, 1, 3)
.getValues(),
showAlert = () => {
const ui = SpreadsheetApp.getUi();
ui.alert('Invalid Data', ui.ButtonSet.OK);
},
isEmpty = e => e === '';
//if startDate is empty or both expirationDt & amount is empty, showAlert and clear range
if (isEmpty(startDate) || [expirationDt, amount].every(isEmpty)){
showAlert();
rg.clear();
}
}