具有锁定单元格的运行脚本

时间:2019-01-25 06:15:22

标签: google-apps-script google-sheets

我编写了以下脚本,作为具有完全编辑权限的图纸的创建者,该脚本对于我来说可以正确运行。该工作表还与具有编辑权限的其他人共享,但是某些单元格已为该用户锁定。结果,当他们打开工作表时,脚本无法运行。该错误似乎首先出现在此行:

  

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 :(得分:0)

因此,如果我有可安装的触发器,则该脚本将运行,因为该人具有编辑权限,但是通过我的凭据,因此绕过了锁定的单元格。下面的改编能否实现这一目标?

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);}
}