Как настроить доступ для редактирования листа только на сегоднешнюю датy в Google Sheets?

Как настроить доступ к редактированию только для листа сегодняшней даты в таблице Google Sheets? Хочу сделать так, чтобы можно было редактировать только лист с номером текущей даты или автоматически закрывать доступ к редактированию прошедшим листам.
  • 9 февраля 2024 г. 11:40
Ответы на вопрос 2
В Google Таблицах нет встроенного функционала, который позволял бы автоматически настраивать доступ к редактированию отдельных листов на основе даты. Впрочем, вы можете использовать скрипты Google Apps Script для создания такой функциональности. Ниже представлено описание шагов и пример скрипта, который закроет доступ к редактированию всех листов, кроме листа с именем, совпадающим с текущей датой.

1. Откройте вашу таблицу Google Sheets.
2. Нажмите на "Инструменты" -> "Редактор скриптов" (Tools -> Script editor).
3. Удалите любой предварительно открытый код и скопируйте следующий скрипт:

```javascript
function setPermissions() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM-dd-yyyy");
  
  sheets.forEach(function(sheet) {
    var protection = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
    if (sheet.getName() === today) {
      if (protection) {
        protection.remove(); // Удалить защиту, если она существует и дата совпадает с текущей датой
      }
    } else {
      if (!protection) {
        protection = sheet.protect(); // Защитить лист, если нет защиты и дата не совпадает с текущей
      }
      var me = Session.getEffectiveUser();
      protection.addEditor(me);
      protection.removeEditors(protection.getEditors());
      if (protection.canDomainEdit()) {
        protection.setDomainEdit(false);
      }
    }
  });
}

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Set Today\'s Permissions', 'setPermissions')
      .addToUi();
}

```

4. Сохраните и назовите проект.
5. Для использования скрипта вам потребуются разрешения. Запустите функцию `setPermissions` в редакторе сценариев и следуйте подсказкам, чтобы предоставить необходимые разрешения.
6. Функция `onOpen` добавит пользовательское меню в вашу таблицу Google Sheets, через которое вы сможете запускать функцию `setPermissions` для обновления прав доступа. Она автоматически сработает каждый раз при открытии документа.
7. Функцию `setPermissions` можно также настроить на автоматический запуск каждый день, используя триггеры Google Apps Script.

Чтобы создать триггер, выполните следующие действия:

1. В редакторе скриптов нажмите на иконку часов "Триггеры текущего проекта" (Current project's triggers).
2. Нажмите "Добавить триггер" (Add trigger) в правом нижнем углу.
3. Выберите функцию `setPermissions` для запуска из списка.
4. Выберите тип события "Расписание времени" (Time-driven) и установите желаемую периодичность.
5. Сохраните триггер.

Теперь скрипт будет автоматически настраивать права доступа каждый день в соответствии с вашим расписанием. Обратите внимание, что защищенные листы только удаляют права редактирования у других пользователей, владелец документа все равно сможет редактировать все листы.
Это делается через Google Apps Script.
Похожие вопросы