Добрый день. Заранее извиняюсь, если данная тема уже была где-то поднята, по крайней мере я не нашел. Есть задача: Имеем документ таблица в гугл доке. К ней открыт доступ по ссылке всем. Требуется, чтоб ее могли редактировать только в определенное время. Написал два небольших скрипта, один закрывает доступ к диапазону ячеек, другой к ним же открывает. У листа появляется, что этот диапазон защищен и только я могу редактировать информацию. Но по факту закрытый диапазон может редактировать кто угодно. Подскажите, что я делаю не так. Или другой способ это сделать. Текст скриптов:[vba]
Код
/** @OnlyCurrentDoc */ function SetPotectionLD() { var spreadsheet = SpreadsheetApp.getActive(); var range = spreadsheet.getRange('B2:Z95'); // @ts-ignore var protection = range.protect().setDescription('Защита листа'); };
function RemPotectionLD() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('B2:Z95').activate(); var allProtections = spreadsheet.getActiveSheet().getProtections(SpreadsheetApp.ProtectionType.RANGE); var matchingProtections = allProtections.filter(function(existingProtection) { return existingProtection.getRange().getA1Notation() == 'B2:Z95'; }); var protection = matchingProtections[0]; protection.remove(); };
[/vba]
Добрый день. Заранее извиняюсь, если данная тема уже была где-то поднята, по крайней мере я не нашел. Есть задача: Имеем документ таблица в гугл доке. К ней открыт доступ по ссылке всем. Требуется, чтоб ее могли редактировать только в определенное время. Написал два небольших скрипта, один закрывает доступ к диапазону ячеек, другой к ним же открывает. У листа появляется, что этот диапазон защищен и только я могу редактировать информацию. Но по факту закрытый диапазон может редактировать кто угодно. Подскажите, что я делаю не так. Или другой способ это сделать. Текст скриптов:[vba]
Код
/** @OnlyCurrentDoc */ function SetPotectionLD() { var spreadsheet = SpreadsheetApp.getActive(); var range = spreadsheet.getRange('B2:Z95'); // @ts-ignore var protection = range.protect().setDescription('Защита листа'); };
function RemPotectionLD() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('B2:Z95').activate(); var allProtections = spreadsheet.getActiveSheet().getProtections(SpreadsheetApp.ProtectionType.RANGE); var matchingProtections = allProtections.filter(function(existingProtection) { return existingProtection.getRange().getA1Notation() == 'B2:Z95'; }); var protection = matchingProtections[0]; protection.remove(); };
Здравствуйте! Попробуйте такую комбинацию, предварительно удалив вручную ранее созданные защиты для этого диапазона: [vba]
Код
/** @OnlyCurrentDoc */
function removeProtection() { var spreadsheet = SpreadsheetApp.getActive(); var allProtections = spreadsheet.getActiveSheet().getProtections(SpreadsheetApp.ProtectionType.RANGE); var matchingProtections = allProtections.filter(function(existingProtection) { return existingProtection.getDescription() == 'Защита Каро-Канн'; }); matchingProtections.forEach(function(protection) { protection.remove(); }); };
function setProtection() { removeProtection(); var spreadsheet = SpreadsheetApp.getActive(); var range = spreadsheet.getRange('B2:Z95'); var protection = range.protect(); protection.setDescription('Защита Каро-Канн');
var me = Session.getEffectiveUser(); protection.addEditor(me); // ВАЖНО: removeEditors не удаляет ни владельца, ни исполнителя скрипта (меня) protection.removeEditors(protection.getEditors()); if (protection.canDomainEdit()) { protection.setDomainEdit(false); } };
[/vba]
Здравствуйте! Попробуйте такую комбинацию, предварительно удалив вручную ранее созданные защиты для этого диапазона: [vba]
Код
/** @OnlyCurrentDoc */
function removeProtection() { var spreadsheet = SpreadsheetApp.getActive(); var allProtections = spreadsheet.getActiveSheet().getProtections(SpreadsheetApp.ProtectionType.RANGE); var matchingProtections = allProtections.filter(function(existingProtection) { return existingProtection.getDescription() == 'Защита Каро-Канн'; }); matchingProtections.forEach(function(protection) { protection.remove(); }); };
function setProtection() { removeProtection(); var spreadsheet = SpreadsheetApp.getActive(); var range = spreadsheet.getRange('B2:Z95'); var protection = range.protect(); protection.setDescription('Защита Каро-Канн');
var me = Session.getEffectiveUser(); protection.addEditor(me); // ВАЖНО: removeEditors не удаляет ни владельца, ни исполнителя скрипта (меня) protection.removeEditors(protection.getEditors()); if (protection.canDomainEdit()) { protection.setDomainEdit(false); } };