Скрыть строки при выполнении критерия - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть скрипт ниже, который ищет «Мертвый» или «Забронированный» в диапазоне «S: S» и скрывает строку, если она найдена.Если 'Live' найден в скрытом ряду, он должен показать строку.Однако приведенный ниже скрипт работает, он скрывает все строки и затем завершает функцию, что может занять некоторое время, когда выполняется поиск более 1000 строк.

function RowHide(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sht2 = ss.getSheetByName("Log");
  var row = sht2.getRange("S:S").getDisplayValues();

  sht2.showRows(1, sht2.getMaxRows()); {
    for (var i = 0; i < row.length; i++) {
      if (row[i][0] == 'Dead') {
        sht2.hideRows(i + 1, 1);
      }
      if (row[i][0] == 'Booked') {
        sht2.hideRows(i + 1, 1);
      } else if (row[i][0] == 'Live') {
        sht2.showRows(i + 1, 1);
      }
    }
  }
}

Мне нужно изменить скрипт только на строки действий, которыетребуют действий, а не всех из них.Возможно ли это?

1 Ответ

0 голосов
/ 28 декабря 2018

Скрытие строк с помощью триггера onEdit

function rowHideProbablyOnEdit(e){
  var ss=e.source;
  var rg=e.range;
  var sh=rg.getSheet();
  if(sh.getName()=="Log"){
    var datR=sh.getDataRange();
    var valA=datR.getValues();
    for(var i=0;i<valA.length;i++){
      if(valA[i][18]=='Dead' || valA[i][18]=='Booked'){
        sh.hideRows(i+1);
      }
    }
  }
}

Скрытие и отображение с помощью триггера onEdit

function rowShowHideProbablyOnEdit(e){
  var ss=e.source;
  var rg=e.range;
  var sh=rg.getSheet();
  if(sh.getName()=="Log"){
    var datR=sh.getDataRange();
    var valA=datR.getValues();
    for(var i=0;i<valA.length;i++){
      if(valA[i][18]=='Dead' || valA[i][18]=='Booked'){
        sh.hideRows(i+1);
      }
      if(valA[i][18]=='Live'){
        Logger.log('Sheet: %s',sh.getName());
        sh.showRows(i+1);
      }
    }
  }
}

Функции настройки и тестирования:

function rowLiveSetup(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Log');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++){
    if(vA[i][18]=='Booked'){
      vA[i][18]='Live';
    }
  }
  rg.setValues(vA);
}

function rowBookedDeadSetup(){
   var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Log');
  var rg=sh.getRange(1,1,180,20);
  var vA=rg.getValues();
  for(var i=0;i<180;i++){
    if(i%3==0){
      vA[i][18]='Booked';
    }
    if(i%3==1){
      vA[i][18]='Dead';
    }
  }
  rg.setValues(vA);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...