По сути мне нужно реализовать очень похожую штуку, а именно...
Необходимо реализовать скрипт, который будет автоматически защищать ячейку в диапазоне A:I от редактирование любым пользователем (в т.ч. не авторизованным, т.к. документ открыт с условием "Редактировать могут все у кого есть ссылка") и при этом наделять правами редактирования одного конкретного пользователя "email@gmail.com"
В файле "пример" попытался переделать скрипт из вышеуказанного форума под свои задачи.
Получилось очень коряво (я к сожалению в этом не разбираюсь, но сделать по аналогии иногда могу), поэтому не судите строго за размер скрипта.
[vba]
Код
function onEdit(e){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var range = e.range;
var Column = range.getColumn(); var Row = range.getRow();
if (sheet.getRange("A"+Row).getValue() != '') { var RangeProtection = sheet.getRange("A"+Row); var User = Session.getEffectiveUser();
var protection = RangeProtection.protect().setDescription('Protected ' + Row); protection.addEditor(User); protection.removeEditors(protection.getEditors());
if (sheet.getRange("B"+Row).getValue() != '') { var RangeProtection = sheet.getRange("B"+Row); var User = Session.getEffectiveUser();
var protection = RangeProtection.protect().setDescription('Protected ' + Row); protection.addEditor(User); protection.removeEditors(protection.getEditors());
if (sheet.getRange("C"+Row).getValue() != '') { var RangeProtection = sheet.getRange("C"+Row); var User = Session.getEffectiveUser();
if (protection.canDomainEdit()) { protection.setDomainEdit(false); } } } } };
[/vba] Однако получившийся скрипт работает в одностороннем порядке: если я как владелец доки меняю значение, то ячейка защищается, а если я это делаю как не авторизованный пользователь, то ничего не происходит - другой не авторизованный пользователь так же может редактировать).
Именно эту "односторонность" и необходимо убрать.
Подскажите (желательно примером) можно ли реализовать такую автозащиту на всех пользователей, в т.ч. не авторизованных?
По сути мне нужно реализовать очень похожую штуку, а именно...
Необходимо реализовать скрипт, который будет автоматически защищать ячейку в диапазоне A:I от редактирование любым пользователем (в т.ч. не авторизованным, т.к. документ открыт с условием "Редактировать могут все у кого есть ссылка") и при этом наделять правами редактирования одного конкретного пользователя "email@gmail.com"
В файле "пример" попытался переделать скрипт из вышеуказанного форума под свои задачи.
Получилось очень коряво (я к сожалению в этом не разбираюсь, но сделать по аналогии иногда могу), поэтому не судите строго за размер скрипта.
[vba]
Код
function onEdit(e){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var range = e.range;
var Column = range.getColumn(); var Row = range.getRow();
if (sheet.getRange("A"+Row).getValue() != '') { var RangeProtection = sheet.getRange("A"+Row); var User = Session.getEffectiveUser();
var protection = RangeProtection.protect().setDescription('Protected ' + Row); protection.addEditor(User); protection.removeEditors(protection.getEditors());
if (sheet.getRange("B"+Row).getValue() != '') { var RangeProtection = sheet.getRange("B"+Row); var User = Session.getEffectiveUser();
var protection = RangeProtection.protect().setDescription('Protected ' + Row); protection.addEditor(User); protection.removeEditors(protection.getEditors());
if (sheet.getRange("C"+Row).getValue() != '') { var RangeProtection = sheet.getRange("C"+Row); var User = Session.getEffectiveUser();
if (protection.canDomainEdit()) { protection.setDomainEdit(false); } } } } };
[/vba] Однако получившийся скрипт работает в одностороннем порядке: если я как владелец доки меняю значение, то ячейка защищается, а если я это делаю как не авторизованный пользователь, то ничего не происходит - другой не авторизованный пользователь так же может редактировать).
Именно эту "односторонность" и необходимо убрать.
Подскажите (желательно примером) можно ли реализовать такую автозащиту на всех пользователей, в т.ч. не авторизованных?ivanovcdek
Сообщение отредактировал ivanovcdek - Среда, 23.06.2021, 18:56
Все дело в триггере onEdit() - он может мало чего, вам нужно функцию переписать как пользовательскую функцию (myFunction()) и поставить триггер из меню триггеров редактора скриптов, на редактирование таблицы. e.range - работать соответственно не будет, нужно будет обращаться к активной колонке через getActiveRange()
Все дело в триггере onEdit() - он может мало чего, вам нужно функцию переписать как пользовательскую функцию (myFunction()) и поставить триггер из меню триггеров редактора скриптов, на редактирование таблицы. e.range - работать соответственно не будет, нужно будет обращаться к активной колонке через getActiveRange()Kashimirush
Работа, работа, перейди на Федота...
Сообщение отредактировал Kashimirush - Четверг, 24.06.2021, 09:37
Kashimirush, Спасибо. Вроде поменял onEdit() на myFunction(), поставил триггер, поменял e.range на getActiveRange()
Сначала даже в столбце А начали автоматом защищаться ячейки. Начал прописывать по аналогии для других столюцов, но сломалось все. теперь и для А не защищаются ячейки. Что я делаю нет так? Точнее, как сделать правильно?
Kashimirush, Спасибо. Вроде поменял onEdit() на myFunction(), поставил триггер, поменял e.range на getActiveRange()
Сначала даже в столбце А начали автоматом защищаться ячейки. Начал прописывать по аналогии для других столюцов, но сломалось все. теперь и для А не защищаются ячейки. Что я делаю нет так? Точнее, как сделать правильно?ivanovcdek
Вы пытаетесь делать дело, в котором не разбираетесь и даже не хотите прочитать документацию или базовые уроки по скриптам, которых на ютубе полно. getActiveRange() вы применили не правильно. Я ведь вам даже код подправил и дал подсказки в комментариях, вы зачем то вернули все как было. По-моему вам лучше обратиться в платную ветку...
Вы пытаетесь делать дело, в котором не разбираетесь и даже не хотите прочитать документацию или базовые уроки по скриптам, которых на ютубе полно. getActiveRange() вы применили не правильно. Я ведь вам даже код подправил и дал подсказки в комментариях, вы зачем то вернули все как было. По-моему вам лучше обратиться в платную ветку...Kashimirush