Проблемы защиты скриптов Google с непересекающимися диапазонами - PullRequest
0 голосов
/ 17 июня 2020

У меня есть массив диапазонов, через который я пытаюсь oop защитить, но он больше не работает. Я не знаю, почему. Вчера он работал нормально, но защиты на листе не происходит. Я попытался удалить всех редакторов, но мы все еще можем редактировать. В принципе, у меня есть список именованных диапазонов; Я создаю массив на основе этих диапазонов; затем получить список ранжирования из этого массива; Затем я пропускаю oop через список рангов, чтобы защитить каждый диапазон.

function protectTU(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getSheetByName("Named Ranges");
  var s2 = ss.getSheetByName("Copy of TRUCK UPDATES");
    var lr1 = s1.getRange("A3:A").getValues(); //Find last rowv
    var lr2 = lr1.filter(String).length; //Find last row
    var lr3 = parseInt(lr2) - 1;
    var data1 = s1.getRange("A3:E" + lr2).getValues();
    var dis = 2;
    var i = 1;
    var v1 = [];


    for (var j = i; j < lr3 - 1; j++)
    {


        if(data1[j][4] == dis)
        {
           v1.push(data1[j][1]);
        }

        if(dis == 1 && j == 43)
        {break;}
        if(dis == 2 && j == 81)
        {break;}
        if(dis == 3 && j == 135)
        {break;}


    }

    var ranges = s2.getRangeList(v1); 

    **for (i = 0; i < ranges.length; i++)
    {
        var protection = ranges[i].protect().setDescription('Please see the office for permission');
    }**


   }

Ответы [ 3 ]

1 голос
/ 17 июня 2020

Попробуйте следующее:

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

function protectTU(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getSheetByName("Named Ranges");
  var s2 = ss.getSheetByName("Copy of TRUCK UPDATES");
  var lr3 = s1.getRange(3,1,s1.getLastRow()-2,1).getValues();//better not to use A1Notation for setting up range here 
  var data1 = s1.getRange(3,1,s1.getLastRow()-2,5).getValues();//and here
  var dis = 2;
  var i = 1;
  var v1 = [];
  for (var j=0;j<data1.length;j++) {
    if(data1[j][4] == dis) {
      v1.push(data1[j][1]);//so hopefully column2 has A1Notation
    }
    if(dis==1 && j==43){break;}
    if(dis==2 && j==81){break;}
    if(dis==3 && j==135){break;}
  }
  var ranges = s2.getRangeList(v1).getRanges();
  //I don't use protection much so  I don't know about this
  for (i = 0; i < ranges.length; i++){
    var protection = ranges[i].protect().setDescription('Please see the office for permission');
  }
}
0 голосов
/ 18 июня 2020

На самом деле это был s2.getRangeList (v1). GETRANGES () часть.

Итак, все просматривают одну и ту же таблицу, но если мне нужно x человек, чтобы срочно меня увидеть. Я хочу заморозить то, что они делают, пока они меня не увидят. Кроме того, каждый может продолжить работу над своей частью таблицы.

0 голосов
/ 18 июня 2020

Вот ссылка на основную c версию электронной таблицы. Кстати, ответ выше очень помог, но он все еще слишком медленный. Ответ был тем, что мне было нужно. Теперь я должен это исправить. Так что мои люди разделены по количеству грузовиков. Однако есть один человек, у которого есть случайные числа. Я не могу заблокировать огромный кусок за раз, потому что другому редактору тоже нужно отредактировать свои грузовики.

Поэтому мне нужно заблокировать строки для грузовиков 301/302/303/305/310 .., не блокируя номера в между ними, поэтому я должен его oop. Мне нужно заблокировать одного человека за раз. Деления: 1: 301-350, 2: 351-394, 3: 395-335 ..., 4: Случайные числа.

https://docs.google.com/spreadsheets/d/1HJROXH1fhkSMtdgQQqUUrKxi0hj7s42I9rjCoz-Vswc/edit?usp=sharing

...