Как можно в Google Таблицах защитить диапазон ячеек, который будет постоянно изменяться в зависимости от заданной даты?

В ячейке A1 используется функция Сегодня (), которая отображает текущую дату. Как можно настроить запрет на редактирование диапазона с 01.01.2025 (ячейка E2) до даты, указанной в ячейке A1, чтобы он обновлялся каждый день?
  • 13 декабря 2024 г. 12:53
Ответы на вопрос 1
В Google Таблицах нет прямой функции для автоматической защиты диапазонов ячеек, основываясь на значениях, которые меняются со временем (например, на основе текущей даты). Однако есть решение, которое можно реализовать с использованием Google Apps Script. С его помощью вы можете написать сценарий, который будет проверять дату в ячейке A1 и в зависимости от её значения защищать или снимать защиту с указанного диапазона.

Вот пример того, как это можно сделать:

1. Откройте Google Таблицы и выберите "Расширения" -> "Apps Script".

2. В открывшемся редакторе скриптов вставьте следующий код:

```javascript
function protectRange() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var today = new Date();
  var todayFormatted = Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyy-MM-dd');
  
  var startDate = new Date('2025-01-01'); // Задайте начальную дату (E2)
  
  // Получаем дату из ячейки A1
  var cellA1 = sheet.getRange('A1').getValue();
  
  if (cellA1 instanceof Date) {
    // Удаляем защиту, если она была установлена
    var protection = sheet.getRange('E2:A' + sheet.getMaxRows()).getProtections(SpreadsheetApp.ProtectionType.RANGE);
    if (protection.length > 0) {
      protection[0].remove();
    }

    // Если текущая дата больше или равна E2 и меньше сегодня,
    // защитим диапазон от E2 до A1
    if (cellA1 >= startDate && cellA1 <= today) {
      var rangeToProtect = sheet.getRange('E2:A' + sheet.getMaxRows());
      var newProtection = rangeToProtect.protect().setDescription('Protected by script');
      newProtection.removeEditors(newProtection.getEditors());
    }
  }
}
```

3. Сохраните код и дайте ему имя.

4. Затем настройте триггер, чтобы код выполнялся каждый день:
   - В редакторе скриптов выберите "Триггеры" (значок часов), затем "Добавить триггер".
   - Выберите функцию `protectRange`, установите триггер на "По расписанию" и выберите "Ежедневно".

Теперь, когда вы запустите этот скрипт (либо вручную, либо через триггер), он будет защищать указанный диапазон в зависимости от даты в ячейке A1 и даты, указанной в E2. С каждым запуском скрипт будет проверять актуальность защиты.
Похожие вопросы