Общая таблица по ссылке и незащищенному диапазону
Здесь моя проблема. Я создаю несколько листов в общем документе электронной таблицы. Это по ссылке. Идея состоит в том, чтобы заблокировать всех, кроме владельца таблицы. Все диапазоны, которые должны быть заблокированы, были заблокированы следующим кодом:range.protect().setDescription("Locked");
Все остальные диапазоны (которые могут быть изменены кем-либо) остаются без вызова protect()
на них. Поэтому я использовал примеры в классе защиты и пришел с этим кодом, который я запускал в режиме отладки в качестве владельца:
let rangeProtect = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (let i = 0; i < rangeProtect.length; i++) {
let protection = rangeProtect[i];
if (protection.canEdit() && (protection.getDescription() == "Locked")) {
let editors = ss.getEditors();
for (let j = 0; j < editors.length; j++) {
ss.removeEditor(editors[j]);
}
// Add only owner
ss.addEditor(ownerEmail);
}
}
К сожалению, это не работает. Каждый человек, который использует ссылку, все еще может редактировать все. Но если я вручную изменю каждый защищенный диапазон с именем "заблокировано" на "только для владельца", это сработает...
Так можете ли вы сказать мне, что я делаю не так?
Я пробовал и этот подход:
let protection = sheet.protect().setDescription('Locked');
let unprotected = sheet.getRange("B1:C10");
protection.setUnprotectedRanges([unprotected]);
Проблема осталась прежней:
- Если я настрою общую ссылку на "Просмотр", я не смогу ничего изменить, несмотря на
setUnprotectedRanges()
вызов. Все заперто. - Если я настрою общую ссылку на "Редактировать", я увижу, что лист заблокирован правильно, за исключением этого диапазона (как видно при открытии "диапазонов и листов, защищенных" из меню "Данные"), но все равно все пользователи, использующие ссылку, могут изменять что-нибудь в листе.
Я борюсь с этой проблемой уже несколько дней, и у меня заканчиваются идеи.
Я действительно много чего перепробовал. Так что, если вы знаете, как это сделать правильно, не могли бы вы дать пример рабочего кода / пример общего документа для этого? Скажем так:
- Создайте два диапазона с описанием "Заблокировано" (например: первая строка и первая колонка)
- Установите правильную защиту на "заблокированных" диапазонах (только для редакции владельца)
- Любой, у кого есть ссылка, может изменить все, кроме заблокированных диапазонов
- Использование общего документа по ссылке
Любая помощь будет принята с благодарностью! В самом деле!
Примечание. Этот код написан на Typescript, потому что я использую CLASP, который конвертирует все в код скрипта Google Apps.