Запуск скрипта с заблокированными ячейками - PullRequest
0 голосов
/ 25 января 2019

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

var values ​​= range.getValues ​​(). Map (function (d) {return d [0]})

Я пытался переписать код, но все, что я в итоге делаю, - это ломаю его. Если я должен разблокировать ячейки для пользователя, то как я могу гарантировать, что они не смогут изменить введенную там информацию? Информация вызывается через форму с закрытого и скрытого листа.

function onOpen(){

  var ss = SpreadsheetApp.getActive();
  var sheetsCount = ss.getNumSheets();
  var sheets = ss.getSheets();

  for (var i = 0; i < sheetsCount; i++){

  var sheet = sheets[i]; 

  var range = sheet.getRange(6, 3, 35);
  var values = range.getValues().map(function(d){ return d[0] }); 

  //clear previous border
  var selection = sheet.getRange(6,2,35,5)
  selection.setBorder(false,false,false,false,false,false);  

  //set border
  var index = values.indexOf("");

      var border = sheet.getRange(5, 2, index+1, 5);
  border.setBorder(true, true, true, true, true, true);}
}

1 Ответ

0 голосов
/ 25 января 2019

поэтому, если у меня есть устанавливаемый триггер, сценарий будет запущен, потому что у человека есть права на редактирование, но через мои учетные данные, так что обходя заблокированные ячейки. Достигнет ли это следующая адаптация?

function createSpreadsheetOpenTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('borders')
      .forSpreadsheet(ss)
      .onOpen()
      .create();
}

function borders(){

  var ss = SpreadsheetApp.getActive();
  var sheetsCount = ss.getNumSheets();
  var sheets = ss.getSheets();

  for (var i = 0; i < sheetsCount; i++){

  var sheet = sheets[i]; 

  var range = sheet.getRange(6, 3, 35);
  var values = range.getValues().map(function(d){ return d[0] }); 

  //clear previous border
  var selection = sheet.getRange(6,2,35,5)
  selection.setBorder(false,false,false,false,false,false);  

  //set border
  var index = values.indexOf("");

      var border = sheet.getRange(5, 2, index+1, 5);
  border.setBorder(true, true, true, true, true, true);}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...