Проблема:
Существует два типа защит 1 :
- RANGE - Защита только определенных диапазонов.
- ЛИСТ - Защита целых листов с исключениями.
Если вы используете защиту листа, вы также можете исключить (кроме) определенные диапазоны из защиты листа (так называемые незащищенные диапазоны) с помощью пользовательского интерфейса. Эти незащищенные диапазоны могут быть затем получены с помощью protection.getUnprotectedRanges()
2 . Защита листа лучше для того, что вы хотите сделать, и этот ответ достаточно объясняет это. Однако диапазоны, которые не защищены на листе, где некоторые диапазоны защищены с помощью «защиты диапазона», не могут быть легко получены.
Возможное решение:
- Раскрасьте весь лист и очистите формат / восстановление только в защищенных диапазонах.
Отрывок:
function colorUnprotectedRangesRed() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheets()[0]; //first sheet
const prots = sh.getProtections(SpreadsheetApp.ProtectionType.RANGE); //get onlyRangeProtections
const rngList = prots.map(function(pro) {
return pro.getRange().getA1Notation();
});
sh.getRange('1:' + sh.getMaxRows()).setBorder(
true,
true,
true,
true,
true,
true,
'red',
SpreadsheetApp.BorderStyle.SOLID
);
//SpreadsheetApp.flush(); //flush the changes first before clearing format, if you have issues
sh.getRangeList(rngList).clearFormat();
}