繁体   English   中英

在特定时间用于细胞保护的 Google 脚本

[英]Google scripts for cell protection at a specific time

我需要帮助来编写脚本。 这就是我想要做的:根据编程的时间表保护特定的细胞。 我能够根据时间限制保护细胞。 为了保护,我很难每天更换细胞。 例如,我想保护:A1:B5(第 1 天)、C1:D5(第 2 天)、A6:B10(第 3 天)、C6:D10(第 4 天)。 我不知道该怎么做。

这是我找到的一个脚本,对我来说效果很好,但我需要另一个部分用于不同的单元格。

function AddProtectionToColumn() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getRange('A1:B5');
  var protectSs = range.protect().setDescription('Protect');  
  var me = Session.getEffectiveUser();
  protectSs.addEditor(me);
  protectSs.removeEditors(protectSs.getEditors());
  if (protectSs.canDomainEdit()) {
    protectSs.setDomainEdit(false); 
  }
}

另外,我没有太多的脚本编写经验,我的第一语言是法语。 我希望我的解释很清楚。

您可以创建第二个 function,它根据星期几设置您想要的范围,并从您当前的 function 中调用它:

function AddProtectionToColumn() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = GetRange(ss);
  var protectSs = range.protect().setDescription('Protect');
  var me = Session.getEffectiveUser();
  protectSs.addEditor(me);
  protectSs.removeEditors(protectSs.getEditors());
  if (protectSs.canDomainEdit()) {
    protectSs.setDomainEdit(false); 
  }
}

function GetRange(ss){
  var today = new Date().getDay();
  // assuming you're only making protected ranges on the first sheet
  var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE); 
  if (today == 0){ // sunday
    //assuming you want to remove yesterday's protection
    removeProtections(protections);
    return ss.getRange('range-for-sunday');
  }
  else if (today == 1){ // monday
    removeProtections(protections);
    return ss.getRange('range-for-monday');
  }
  else if (today == 2){ // tuesday
    removeProtections(protections);
    return ss.getRange('range-for-tuesday');
  }
  else if (today == 3){ // wednesday
    removeProtections(protections);
    return ss.getRange('range-for-wednesday');
  }
  else if (today == 4){ // thursday
    removeProtections(protections);
    return ss.getRange('range-for-thursday');
  }
  else if (today == 5){ // friday
    removeProtections(protections);
    return ss.getRange('range-for-friday');
  }
  else if (today == 6){ // saturday
    removeProtections(protections);
    return ss.getRange('range-for-saturday');
  }
}

function removeProtections(protections){
  for (var i = 0; i < protections.length; i++){
    protections[i].remove();
  }
}

我添加的removeProtections() function 以防您想删除前一天的保护,如果您想保留它们,可以将其删除。

参考:

 function AddProtectionToColumn() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var range = GetRange(ss);
      var protectSs = range.protect().setDescription('Protect');
      var me = Session.getEffectiveUser();
      protectSs.addEditor(me);
      protectSs.removeEditors(protectSs.getEditors());
      if (protectSs.canDomainEdit()) {
        protectSs.setDomainEdit(false); 
      }
    }

    function GetRange(ss){
      var today = new Date().getDay();
      // assuming you're only making protected ranges on the first sheet
       var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE);
      if (today == 0){ // sunday
        return ss.getRange('A1:B5');
      }
      else if (today == 1){ // monday
        return ss.getRange('C1:D5');
      }
      else if (today == 2){ // tuesday
        return ss.getRange('A6:B10');
      }
      else if (today == 3){ // wednesday
        return ss.getRange('C6:D10');
      }
      else if (today == 4){ // thursday
        return ss.getRange('A7:B11');
      }
      else if (today == 5){ // friday
        return ss.getRange('C7:D11');
      }
      else if (today == 6){ // saturday
        return ss.getRange('A8:B12');
      }
    }

你好。 这是运行良好的最终版本! 感谢拉法吉列尔莫。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM