如何保护工作表然后取消保护特定单元格

时间:2018-12-14 06:19:27

标签: google-apps-script google-sheets

我创建了一个在打开Goog​​leSheet时运行的脚本。该脚本取消保护整个工作表,然后保护当前日期所在行以外的所有内容。该脚本完全可以实现我想要的功能,但是在我看来,它太麻烦且耗时。

除了保护整个特定范围之外,还有一种方法可以保护整个工作表,然后仅取消保护几个范围。就脚本运行时间而言,这似乎更为有效。

我唯一的问题是,当我尝试取消保护特定范围时,代码将引发错误。

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

有什么建议吗?

加里

1 个答案:

答案 0 :(得分:0)

此修改如何?

修改点:

  • 当添加不受保护的范围时,请将它们作为数组添加。

修改后的脚本:

请如下修改//set unprotected ranges的部分。

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

参考:

如果这不是您想要的,请告诉我。我想修改它。