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