How to unprotect a protected range in spreadsheet

2019-07-24 02:40发布

问题:

I have a sheet that is editable by anyone with the link and a script that protects a certain range from being edited:

var range = playerss.getSheetByName("Sheet1").getRange(8,matchnumber*3-1,12);
var protection = range.protect().setDescription('Bets closed!')
var me = Session.getEffectiveUser();

protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
}

How do I simply remove this protection? setUnprotectedRanges doesn't work because it overwrites any other unprotected ranges that I had and doesn't remove the protected range either, meaning I still can't edit that range. The following also doesn't work:

playerssid = refss.getSheetByName(sname).getRange(i,6).getValue();
playerss = SpreadsheetApp.openById(playerssid);

var sheet = playerss.getSheetByName('Sheet1');
var range = sheet.getRange(8,matchnumber*3-1,12);
var protection = range.protect();

protection.remove();

Am I missing something?

回答1:

You can name your range:

var range = playerss.getSheetByName("Sheet1").getRange(8,matchnumber*3-1,12);
var protection = range.protect().setDescription('Bets closed!').setRangeName("bets-"+matchnumber);
var me = Session.getEffectiveUser();


protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
}

you can remove the protection with using the name:

var protections = playerss.getProtections(SpreadsheetApp.ProtectionType.RANGE)
for (var i = 0; i < protections.length; i++) {
  var protection = protections[i];
  if (protection.getRangeName() == "bets-"+matchnumber){
    protection.remove();
  }
}

Good luck :)