Скрытие строки на основе значения ячейки в большой электронной таблице приводит к ошибке «Превышено максимальное время выполнения» - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь скрыть строки на основе значения в ячейке.

Я использую Google Sheets в качестве инвентаря для элементов.В последнем столбце, если я отмечу «Да», я бы хотел, чтобы вся строка была скрыта.

Код работает на листе шаблона, но когда я пытаюсь активировать его в своем основном инвентаре, он говорит «Превышено»Максимальное время выполнения », что, как я полагаю, происходит из-за того, что это довольно большой инвентарь.

function onEdit() {

var ss = SpreadsheetApp.getActiveSpreadsheet();

var sheet = ss.getActiveSheet();

  var lastRow = sheet.getLastRow();

  for( i=1 ; i<=lastRow ; i++) { // i <= lastRow

      var status = sheet.getRange("AD"+i).getValue();

      if (status == "Yes") {

         sheet.hideRows(i);
    } 
   }
  }

Я вижу, что на триггерах вы можете настроить его на управление по времени.

Как сделать так, чтобы код не превышал 5-минутное максимальное время?

1 Ответ

0 голосов
/ 01 июня 2018

Поскольку ваш сценарий использует зарезервированное имя функции onEdit, он срабатывает каждый раз, когда происходит редактирование, и каждый раз, когда он циклически перебирает все строки листа, и, если выполняется условие, он скрывает строку, даже если она уже скрыта.

Измените свой сценарий, чтобы проверить текущую отредактированную ячейку, используйте для этого en при редактировании объекта события и скрывайте текущую строку, только если условие выполнено.Что-то вроде следующего:

function onEdit(e){
   if(e.range.getColumn() === 30 && e.value === 'Yes'){
     e.range.getSheet().hideRows(e.range.getRow())
   }
}

ПРИМЕЧАНИЕ: я еще не тестировал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...