#google-sheets
#google-sheets
Вопрос:
Я использую следующий код для защиты диапазона из таблицы Google
// Protect range A1:B10, then remove all other users from the list of editors.
var ss = SpreadsheetApp.getActive();
var range = ss.getRange('A1:B10');
var protection = range.protect().setDescription('Sample protected range');
// Ensure the current user is an editor before removing others. Otherwise, if the user's edit
// permission comes from a group, the script throws an exception upon removing the group.
var me = Session.getEffectiveUser();
protection.addEditor("*my email account*");
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
где моя учетная запись электронной почты — это учетная запись Google.
Затем я делюсь листом с некоторыми другими людьми, с которыми я хочу иметь возможность снимать защиту, если им нужно, запустив скрипт, запускаемый щелчком по значку. Код включает
// Remove all range protections in the spreadsheet that the user has permission to edit.
var ss = SpreadsheetApp.getActive();
var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i ) {
var protection = protections[i];
if (protection.canEdit()) {
protection.remove();
}
}
Согласно документации, приведенный выше код должен удалить защиту. Но это не работает. Что не так?
Спасибо!
Комментарии:
1. Для меня это удаляет защищенные диапазоны. Вы уверены, что это не работает?
2. ДА. Когда вы снимаете защиту, делаете ли вы это с другой учетной записью по сравнению с той, которую вы использовали для защиты диапазона? Спасибо
Ответ №1:
Факты:
- Вы создали документ, который делает вас владельцем.
- Вы создали защиту для диапазона, что делает вас единственным лицом, которому разрешено изменять этот диапазон или эту защиту.
Необходимые шаги:
- Сделайте приглашенного пользователя редактором вашей защиты, чтобы он мог ее удалить. Использование
protection.addEditor("example.editor@domain.com")
- Теперь «example.editor@domain.com » могу снять добавленную вами защиту.
- «example.editor@domain.com » может создать новую защиту и не требует добавлять вас (владельца документа) в качестве редактора к защите. По умолчанию вы являетесь редактором всех защит.
Пример:
Когда владелец изначально создает защиту, он должен добавить того, кого он хочет, чтобы иметь возможность редактировать защищенный диапазон и защиту в качестве редактора самой защиты. итак, вы бы использовали функцию example protectRangeAddingEditor()
.
Затем, если вы не хотите делиться этой функцией с редакторами, после создания защиты удалите ее из скрипта. И оставьте только removeProtection()
amp; protectRange()
для их использования.
function protectRangeAddingEditor() {
// Protect range A1:B10, then remove all other users from the list of editors.
var ss = SpreadsheetApp.getActive();
var range = ss.getRange('A1:B10');
try {
// Create the protection (you are owner of the document amp; the protection since you created it)
var protection = range.protect().setDescription('Sample protected range');
// Add editors to your protection
var editor = "example.editor@domain.com"
protection.addEditor(editor);
protection.setDomainEdit(false);
}
catch (error) {
console.log(JSON.stringify(error))
}
}
function removeProtection() {
// Remove all range protections in the spreadsheet that the user has permission to edit.
var ss = SpreadsheetApp.getActive();
var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i ) {
var protection = protections[i];
if (protection.canEdit()) {
protection.remove();
}
}
}
function protectRange() {
// Protect range A1:B10, then remove all other users from the list of editors.
var ss = SpreadsheetApp.getActive();
var range = ss.getRange('A1:B10');
try {
// Create the protection (you are owner of the document amp; the protection since you created it)
var protection = range.protect().setDescription('Sample protected range');
protection.setDomainEdit(false);
}
catch (error) {
console.log(JSON.stringify(error))
}
}