Общая таблица по ссылке и незащищенному диапазону

Здесь моя проблема. Я создаю несколько листов в общем документе электронной таблицы. Это по ссылке. Идея состоит в том, чтобы заблокировать всех, кроме владельца таблицы. Все диапазоны, которые должны быть заблокированы, были заблокированы следующим кодом: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]);

Проблема осталась прежней:

  1. Если я настрою общую ссылку на "Просмотр", я не смогу ничего изменить, несмотря на setUnprotectedRanges() вызов. Все заперто.
  2. Если я настрою общую ссылку на "Редактировать", я увижу, что лист заблокирован правильно, за исключением этого диапазона (как видно при открытии "диапазонов и листов, защищенных" из меню "Данные"), но все равно все пользователи, использующие ссылку, могут изменять что-нибудь в листе.

Я борюсь с этой проблемой уже несколько дней, и у меня заканчиваются идеи.

Я действительно много чего перепробовал. Так что, если вы знаете, как это сделать правильно, не могли бы вы дать пример рабочего кода / пример общего документа для этого? Скажем так:

  1. Создайте два диапазона с описанием "Заблокировано" (например: первая строка и первая колонка)
  2. Установите правильную защиту на "заблокированных" диапазонах (только для редакции владельца)
  3. Любой, у кого есть ссылка, может изменить все, кроме заблокированных диапазонов
  4. Использование общего документа по ссылке

Любая помощь будет принята с благодарностью! В самом деле!

Примечание. Этот код написан на Typescript, потому что я использую CLASP, который конвертирует все в код скрипта Google Apps.

0 ответов

Другие вопросы по тегам