Быстрый тест, который я смог запустить, состоял в том, чтобы установить столбец флажков в столбце F, а затем создать функцию, которая перехватывает каждое событие редактирования на листе.Это сразу же поймет, когда пользователь установит флажок, а затем скроет эту строку.
Хитрость в использовании события onEdit
заключается в определении, какая ячейка была фактически изменена.В вашем случае вы хотите полностью следовать своей логике, только если изменение происходит с флажком в столбце F. В моем коде я использовал функцию, чтобы убедиться, что изменение находится в желаемом диапазоне.Функция выглядит следующим образом:
function isInRange(checkRange, targetCell) {
//--- check the target cell's row and column against the given
// checkrange area and return True if the target cell is
// inside that range
var targetRow = targetCell.getRow();
if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
var targetColumn = targetCell.getColumn();
if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
//--- the target cell is in the range!
return true;
}
Итак, все, что нужно сделать вашей функции onEdit
, - это сделать быстрый вызов при запуске события редактирования, чтобы увидеть, попадает ли изменение в диапазон, в котором вы находитесь.находясь в поиске.В этом случае я установил переменную с моим диапазоном для проверки:
var thisSheet = SpreadsheetApp.getActiveSheet();
var checkRange = thisSheet.getRange("F2:F200");
if (isInRange(checkRange, eventObj.range)) {
После этого нужно просто выбрать номер строки и скрыть или показать.Вот полный пример решения:
function isInRange(checkRange, targetCell) {
//--- check the target cell's row and column against the given
// checkrange area and return True if the target cell is
// inside that range
var targetRow = targetCell.getRow();
if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
var targetColumn = targetCell.getColumn();
if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
//--- the target cell is in the range!
return true;
}
function onEdit(eventObj) {
//--- you could set up a dynamic named range for this area to make it easier
var thisSheet = SpreadsheetApp.getActiveSheet();
var checkRange = thisSheet.getRange("F2:F200");
if (isInRange(checkRange, eventObj.range)) {
//--- so one of the checkboxes has changed its value, so hide or show
// that row
var checkbox = eventObj.range;
var rowIndex = checkbox.getRow();
Logger.log('detected change in checkbox at ' + checkbox.getA1Notation() + ', value is now ' + checkbox.getValue());
if (checkbox.getValue() == true) {
Logger.log('hiding the row');
thisSheet.hideRows(rowIndex, 1);
} else {
Logger.log('showing the row');
thisSheet.showRows(rowIndex, 1);
}
}
}