Общая таблица по ссылке и незащищенному диапазону - PullRequest
0 голосов
/ 24 февраля 2019

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

...