Я пытаюсь защитить указанный диапазон c до последней строки, но после попытки рассмотреть возможность наличия пустых строк в пути я не смог получить ожидаемый результат.
В моем примере: я пытаюсь защитить диапазон A: D, и поскольку последняя строка, содержащая данные, - C24, сценарий должен защищать A2: D24 . Столбец F (и все остальное) игнорируется в моем сценарии.
Снимок экрана :
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());
}