Задать вопрос
@Mahev

Как разрешить Google App Script редактировать защищенную ячейку или диапазон?

Добрый день!
Прошу помочь, сам не смог разобраться.
У меня есть кастомное меню с кнопкой, на которую назначена функция. Эта функция вызывается и работает в любой ячейке определенного столбца. Если вызвана из нужного столбца - вызывает ui.prompt, регуляркой проверяет введенное юзером значение и записывает полученное значение в активную ячейку и ведет лог.

Вопрос: как мне сделать так, чтобы ячейки столбца, который будут изменять юзеры, были защищены от редактирования руками, но при этом этом редачились через написанную функцию, путём нажатия кнопки меню ?
Если просто защитить столбец от редактирования, кнопка (скрипт) с аккаунта юзера возвращает ошибку - редактирование запрещено.

Пробовал через класс Protection, ничего не вышло :(

Очень прошу помочь, спасибо!

Кусок кода:
var check = function (callback) {
 
      var response = ui.prompt('Изменить плановое время сборки', 'Введите новое время в формате ЧЧ:ММ:', ui.ButtonSet.OK_CANCEL);
      if (response.getSelectedButton() === ui.Button.CANCEL || response.getSelectedButton() === ui.Button.CLOSE) return
      if (!response.getResponseText().match(/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/)) {
      ui.alert('Время указано неправильно, повторите ввод.')
      check()
    }
        else {
          fin (response.getResponseText())
        }
      
      }
        var fin = function (data) {
        spreadsheet.toast(`Плановое время сборки изменено на ${data}`, 'Готово!', 10)
        logSheet.appendRow([new Date(), "Ячейка: ", changed_cell, 'Было:', spreadsheet.getActiveRange().getValue(), 'Стало:', data, 'пользователь:', me]);
        spreadsheet.getActiveCell().setValue(data);
        return
        }

      check()
  • Вопрос задан
  • 692 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Mahev Автор вопроса
Спустя почти 8 часов поиска я разобрался и сделал решение сам.
Если коротко - нужно создать внешнее google web app приложение, в которое с помощью метода fetch передавать адрес ячейки и полученную в промпте от юзера инфу, а уже во внешнем приложении удаленно изменять значение указанной ячейки от имени владельца таблицы (то есть меня).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@yogsvet
У меня получилось так. Сперва вручную создал защищенный диапазон через "Меню - Данные - Защитить листы и диапазоны". Назначил ему в настройках разрешений доступ "только я". После этого дал доступ редактора другому пользователю (тестовый гугл-аккаунт). Допустим ему нужно работать с таблицей. И оказалось, что он может редактировать и защищенный диапазон.

РЕШЕНИЕ. Еще раз, как создатель таблицы, залез в глубины настроек диапазона и снял там внутри галочку напротив доступа у тестового пользователя. И всё получилось. После этого кого бы я ни добавлял в редакторы, вплоть до "Все, у кого есть ссылка", они не имели возможность редактировать защищенную область.
При этом они, редактируя доступные области, инициировали запуск скрипта, который благополучно писал данные в защищенную область.

Запуск скрипта был мной изначально назначен с помощью триггера по факту редактирования таблицы

660072aa7a6a2286742171.jpeg.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы