Google Sheets - блокировка ячеек после достижения значения и еще одна вещь - PullRequest
0 голосов
/ 23 апреля 2020

Создание электронной таблицы для моих коллег. Цель состоит в том, чтобы они поместили свои часы (12 или 6) в ячейку, соответствующую дате и их имени. Я пытаюсь сделать так, чтобы столбец даты блокировался после того, как ячейка суммы для этого столбца достигнет определенной суммы.

Я использую это ( Ячейки блокировки скриптов Google ) в качестве основы но мне не очень повезло.

    function myFunction() {
  function onOpen() {

  var ss = SpreadsheetApp.getActive();
  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var cell = source.getRange("B12").getValue();
  var range = ss.getRange("B2:B11");

  if (cell == 10) {

    // Protect range B2:B11 if cell 'B12' = 10
    var protection = range.protect().setDescription('Sample protected range');
    Logger.log

  } else {

    // Remove protection if cell 'B12' is anything other than 10
    var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);

    for (var i = 0; i < protections.length; i++) {
      var protection = protections[i];
      protection.remove();
    }
  }  
} 
}

Я также хотел бы, чтобы сумма представляла дерьмо, а не часы, поэтому, если человек написал «12», в столбце суммы будет записано «1»

Любая помощь будет потрясающей.

1 Ответ

1 голос
/ 23 апреля 2020

Вы должны изменить несколько вещей

  1. Не вкладывать onOpen в myFunction - это не будет работать
  2. Если вы хотите, чтобы защита обновлялась при каждом обновлении B12 - вы должны использовать триггер onEdit вместо onOpen
  3. . Лучше заменить cell == 10 на cell >= 10, чтобы учесть вероятность того, что значение случайно превысит максимальное значение 4.It недостаточно для создания защиты, чтобы сделать ее полезной, вам нужно удалить редакторы из нее
  4. Только владелец скрипта (вы) должен поддерживать доступ
  5. Для этого используйте устанавливаемый триггер вместо простого, чтобы убедиться, что он работает всегда как вы, а не как пользователь, открывающий документ

Образец (будет привязан к устанавливаемому триггеру onEdit ):

function bindAnOnEditTiggerToMe() {

  var ss = SpreadsheetApp.getActive();
  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var cell = source.getRange("B12").getValue();
  var range = ss.getRange("B2:B11");

  if (cell >= 10) {    
    // Protect range B2:B11 if cell 'B12' = 10
    var protection = range.protect().setDescription('Sample protected range');
    var me = Session.getEffectiveUser();
    protection.addEditor(me);
    protection.removeEditors(protection.getEditors());
    if (protection.canDomainEdit()) {
      protection.setDomainEdit(false);
    }    
  } else {    
    // Remove protection if cell 'B12' is anything other than 10
    var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);    
    for (var i = 0; i < protections.length; i++) {
      var protection = protections[i];
      protection.remove();
    }
  }  
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...