Как сделать проверку условий protect?
Всем привет! Функция блокирует ячейку, когда в "D22" значение не 25. Как добавить условие проверки определенной ячейки, что она уже защищена? если защищена – ничего не делать, если не защищена – защитить (код добавил).
если не добавить проверку - будет создано, каждый раз, бесконечное количество правил на "D22", когда там значение не 25 :(
function test6666() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var test7 = ss.getSheetByName('ТЕСТ7');
var d22 = test7.getRange('D22').getValue();
var d222 = test7.getRange('D22');
if (d22 == 22) {
} else {
var protection = d222.protect().setDescription('Protect Sheet');
var editors = ["[email protected]"];
protection.addEditors(editors);
protection.removeEditors(protection.getEditors());
}
}
Ответы (1 шт):
Как вариант, можно просто проверять, является ли адрес диапазона адресом, который уже находится в списке защит. Это очень примитивный способ, но должен быть эффективным, когда идет попытка защитить колонку/строку/ячейку/конкретный диапазон
function test6666() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var test7 = ss.getSheetByName('ТЕСТ7');
var d22 = test7.getRange('D22').getValue();
var d222 = test7.getRange('D22');
const a1notation = d222.getA1Notation();
if (d22 == 22) {
} else if (
!test7.getProtections(SpreadsheetApp.ProtectionType.RANGE)
.some(p => () => isSameProtection_(p, a1notation))
) {
var protection = d222.protect().setDescription('Protect Sheet');
var editors = ["[email protected]"];
protection.addEditors(editors);
protection.removeEditors(protection.getEditors());
}
}
/**
*
* @param {globalThis.SpreadsheetApp.Protection} protection
* @param {string} rangeA1Notation
* @param {checkCallback} checkCallback
*/
function isSameProtection_(protection, rangeA1Notation, checkCallback = undefined) {
const a1Notation = protection.getRange().getA1Notation();
return a1Notation === rangeA1Notation && (checkCallback ? checkCallback(protection) : true);
}
/**
*
* @callback checkCallback
* @param {globalThis.SpreadsheetApp.Protection} protection
* @returns {boolean}
*/
Пример в Таблице https://docs.google.com/spreadsheets/d/1A7Vm_TBMnIpxwkcE6wsLdiHJuioS52gWh6Gd9YvaYnI/edit?usp=sharing