Google apps script 如何保护工作表,然后取消对特定单元格的保护

Google apps script 如何保护工作表,然后取消对特定单元格的保护,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我已经创建了一个脚本,可以在谷歌首页的开头运行。脚本取消对整个工作表的保护,然后保护除当前日期行以外的所有工作表。这个脚本正是我想要的,但我觉得它太麻烦和耗时了 有没有一种方法可以保护整个工作表,然后只取消对少数范围的保护,而不是保护一大堆特定范围。就脚本运行时间而言,这似乎效率更高 我唯一的问题是,当我试图取消对特定范围的保护时,代码会抛出一个错误 Cannot find method setUnprotectedRanges(Range) 此处的代码片段: var sheet = Spre

我已经创建了一个脚本,可以在谷歌首页的开头运行。脚本取消对整个工作表的保护,然后保护除当前日期行以外的所有工作表。这个脚本正是我想要的,但我觉得它太麻烦和耗时了

有没有一种方法可以保护整个工作表,然后只取消对少数范围的保护,而不是保护一大堆特定范围。就脚本运行时间而言,这似乎效率更高

我唯一的问题是,当我试图取消对特定范围的保护时,代码会抛出一个错误

Cannot find method setUnprotectedRanges(Range)
此处的代码片段:

var sheet = SpreadsheetApp.getActiveSheet();
    // Remove all range protections in the spreadsheet
    var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
    for (var i = 0; i < protections.length; i++) {
      var protection = protections[i];
      protection.remove();
    }

  var protection = sheet.protect();
    //restrict editors to owner
    protection.getRange().getA1Notation();
    var eds = protection.getEditors();
    protection.removeEditors(eds);

    //set unprotected ranges
    var range1 = sheet.getRange("A2:L2");
    protection.setUnprotectedRanges(range1);
    var range1 = sheet.getRange("A4:C4");
    protection.setUnprotectedRanges(range1); 
var sheet=SpreadsheetApp.getActiveSheet();
//删除电子表格中的所有范围保护
var保护=sheet.getProtections(电子表格app.ProtectionType.RANGE);
对于(变量i=0;i<0.length;i++){
无功保护=保护[i];
保护。移除();
}
var保护=sheet.protect();
//将编辑器限制为所有者
protection.getRange().getA1Notation();
var-eds=protection.getEditors();
保护。删除编辑器(eds);
//设置不受保护的范围
var range1=sheet.getRange(“A2:L2”);
保护。设置未保护的范围(范围1);
var range1=sheet.getRange(“A4:C4”);
保护。设置未保护的范围(范围1);
有什么建议吗


加里

这次修改怎么样

修改点:
  • 当它添加不受保护的范围时,请将其作为数组添加
修改脚本: 请修改
//设置不受保护的范围的部分,如下所示

//set unprotected ranges
var range1 = sheet.getRange("A2:L2");
var range2 = sheet.getRange("A4:C4");
protection.setUnprotectedRanges([range1, range2]);
如果要将新范围添加到现有未受保护的范围,请使用以下脚本

var ranges = protection.getUnprotectedRanges();
var range1 = sheet.getRange("A2:L2");
var range2 = sheet.getRange("A4:C4");
ranges.push(range1);
ranges.push(range2);
protection.setUnprotectedRanges(ranges);
参考:
如果这不是你想要的,请告诉我。我想修改它