Защитите указанный диапазон c, получив последнюю строку, содержащую данные, с возможными пустыми строками между - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь защитить указанный диапазон c до последней строки, но после попытки рассмотреть возможность наличия пустых строк в пути я не смог получить ожидаемый результат.

В моем примере: я пытаюсь защитить диапазон A: D, и поскольку последняя строка, содержащая данные, - C24, сценарий должен защищать A2: D24 . Столбец F (и все остальное) игнорируется в моем сценарии.

Снимок экрана :

enter image description here

I ' m получает следующую ошибку: Исключение: количество строк в диапазоне должно быть не менее 1

для строки 30, соответствующей var rangeToProtect = ss.getRange(2,1,(lr-1), 4);

My скрипт:

function getLastRow(sheet,rangeString) {

  var rng = sheet.getRange(rangeString).getValues();
  var lrIndex;

  for(var i = rng.length-1;i>=0;i--){

    lrIndex = i;

    if(!rng[i].every(function(c){ return c == ""; })){

      break;

  }
  }

  var lr = lrIndex + 1

  Logger.log(lr);

}


function protectData(){

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var curDate = Utilities.formatDate(new Date(), "GMT", "EEE d MMM yyyy HH:mm:ss")
  var lr = getLastRow(ss,"A2:D");
  var rangeToProtect = ss.getRange(2,1,(lr-1), 4);
  var protection = rangeToProtect.protect().setDescription(curDate);
  protection.removeEditors(protection.getEditors());

  }

// Функция отредактирована с предложениями:

function protectImportedData(){

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var curDate = Utilities.formatDate(new Date(), "GMT+3", "EEE d MMM yyyy HH:mm:ss")

  var Direction = SpreadsheetApp.Direction;
  var aLast =ss.getRange("A1:D"+(ss.getLastRow()+1)).getNextDataCell(Direction.UP).getRow();

  var rangeToProtect = ss.getRange(2,1,(aLast-1), 4);
  var protection = rangeToProtect.protect().setDescription(curDate);
  protection.removeEditors(protection.getEditors());

  }

1 Ответ

2 голосов
/ 03 апреля 2020

Спасибо @TheMaster за указание на ошибку, функция getLastRow ничего не возвращала,

Код работает, если мы изменим эту строку:

var lr = lrIndex + 1

на:

return lrIndex + 1

Также нам не нужно -1 в:

var rangeToProtect = ss.getRange(2,1,(lr-1), 4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...