Как сделать защищенный диапазон в Google Sheet доступным для функции javascript из скрипта приложения

#google-apps-script #google-sheets

#google-apps-script #google-таблицы

Вопрос:

Я поделился таблицами Google, но защитил определенный диапазон от редактирования. Теперь я не могу редактировать диапазон программно из скрипта приложения, например. установить значение в ячейку. Вопрос: Есть ли способ сохранить защиту диапазона (запретить пользователям редактировать защищенный диапазон) и редактировать его с помощью скрипта? Спасибо!

Ответ №1:

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

Попробуйте удалить защиту диапазона с помощью скрипта, затем измените защищенный диапазон и снова добавьте защиту.

 function main() {
  // Remove protection before editing
  removeProtectionToColumn();
  // Call your function that modifies the protected range in between
  modifySheetDataFunction(); 
  // Add protection again
  addProtectionToColumn();
}

function addProtectionToColumn() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange('A:A');
  var protectSs = range.protect().setDescription('Protect column A');
  var me = Session.getEffectiveUser();
  protectSs.addEditor(me);
  protectSs.removeEditors(protectSs.getEditors());
  if (protectSs.canDomainEdit()) {
    protectSs.setDomainEdit(false);
  }
}

function removeProtectionToColumn() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var i = 0; i < protections.length; i  ) {
    if (protections[i].getDescription() == 'Protect column A') {
      protections[i].remove();
    }
  }
}
 

Здесь должно быть очень мало времени, и оно должно быть выполнимо для всего, что вы пытаетесь работать, если вы не изменяете очень, очень, очень большой набор данных. Вы всегда можете протестировать это поведение со своими коллегами.

Для получения более подробной информации о защите, пожалуйста, ознакомьтесь с этой документацией

Комментарии:

1. Спасибо вам за ваш ответ! У меня есть небольшая проблема. Функция, которая изменяет промежуточный защищенный диапазон, вызывается нажатием кнопки на боковой панели, и она принимает записи пользовательской формы в качестве параметра (массива) и устанавливает тот же массив в защищенном диапазоне. Итак, он записывается как modifySheetDataFunction(array); когда я помещаю две другие функции внутрь этой функции (modifySheetDataFunction(array)) и вызываю их, ничего не происходит, кроме того, что массив появляется в незащищенном диапазоне. И я не могу вызвать функцию main нажатием кнопки и отправить массив в качестве параметра. Любая информация будет оценена по достоинству!

2. По умолчанию защита применяется только к другим пользователям, это не повлияет на того, кто ее добавляет, в этом случае вы и запускаемые вами скрипты все равно можете редактировать лист вручную, даже если диапазон уже защищен. Что вы можете сделать, так это попробовать отредактировать его инкогнито с помощью другого пользователя, чтобы убедиться, что примененная защита работает.