Google表格 - 允许用户在受保护范围内运行脚本

时间:2016-07-05 12:41:24

标签: google-apps-script google-sheets

我是Apps脚本的新手,并且一直在减慢自己的教学速度。我搜索了Stack Over Flow并发现了类似的问题,并尝试使用找到的信息解决问题,但迄今为止没有成功。希望这里有人可以给新手一些指导。

我有一个与其他用户共享的电子表格。我想要保护的公式中有一些范围。我编写了一个脚本,可以更改受保护范围内的论坛。它在我的帐户下运行完美,但共享用户无法运行脚本,因为他们没有获得许可"。

我试图写一些试图授予临时访问权限以编辑受保护范围的代码。我的想法是有三种不同的功能。第一个功能删除了保护。第二个函数执行对现在不受保护的范围的更改。然后第三个功能再次保护范围。以下代码在我的帐户下完美运行。但是,当以共享用户身份登录时,会发出警告,说明"您无权执行.."

有人可以告诉我哪里出错了,并指出我的方向正确吗?

function myFunction() {
  //add protections back
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('Spray Template');
  var range = sheet.getRange('B15:E15');
  var range2 = sheet.getRange('G15:H15');
  var range3 = sheet.getRange('D16:E16');
  var ranges = [range,range2,range3];
  for (var j = 0; j<3; j++){
    ranges[j].protect().removeEditor('email_here@gmail.com');
  }
}


function myFunction2(){
//remove protections
var ss = SpreadsheetApp.getActive();
var ss2= ss.getSheetByName('Spray Template');  
var protections = ss2.getProtections(SpreadsheetApp.ProtectionType.RANGE);
 f
 or (var i = 0; i < protections.length; i++) {
   var protection = protections[i];

protection.addEditor('email_here@gmail.com');
SpreadsheetApp.flush();
protection.remove();   
 }
}

function test() {
  myFunction2();
  functionThatChangesRange();
  myFunction();
}

3 个答案:

答案 0 :(得分:0)

我想如果未经许可编辑/访问这些受保护的范围,其他人也将缺乏编辑保护本身的权限(即使是通过脚本)。

这是因为脚本从运行它的用户继承其权限(即脚本在该人的帐户下运行)。

显然,你不能同时保护范围,也不能让任何人改变保护 - 这会破坏整个目的!

答案 1 :(得分:0)

我看到其他地方建议不要保护一个单元格,并在运行&#39; onedit&#39;的文档中设置一个脚本。每当用户更改该单元格的值时,脚本就应该运行。

答案 2 :(得分:0)

一个人可以使用onEdit运行脚本或可安装的触发器。但是,我还没有找到一种方法,可以从自定义菜单或按钮调用脚本并编辑成功保护的范围。