Google apps script 谷歌表单-在达到值后锁定单元格,还有一件事

Google apps script 谷歌表单-在达到值后锁定单元格,还有一件事,google-apps-script,google-sheets,Google Apps Script,Google Sheets,为我的同事制作一个自我安排的电子表格。他们的目标是将自己的小时数(12或6)放在与日期和姓名对应的单元格中。我试图让它,以便日期列将锁定后,该列的总和单元格达到一定的总数 我用这个()作为我的基础,但我运气不太好 function myFunction() { function onOpen() { var ss = SpreadsheetApp.getActive(); var source = SpreadsheetApp.getActiveSpreadsheet().

为我的同事制作一个自我安排的电子表格。他们的目标是将自己的小时数(12或6)放在与日期和姓名对应的单元格中。我试图让它,以便日期列将锁定后,该列的总和单元格达到一定的总数

我用这个()作为我的基础,但我运气不太好

    function myFunction() {
  function onOpen() {

  var ss = SpreadsheetApp.getActive();
  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var cell = source.getRange("B12").getValue();
  var range = ss.getRange("B2:B11");

  if (cell == 10) {

    // Protect range B2:B11 if cell 'B12' = 10
    var protection = range.protect().setDescription('Sample protected range');
    Logger.log

  } else {

    // Remove protection if cell 'B12' is anything other than 10
    var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);

    for (var i = 0; i < protections.length; i++) {
      var protection = protections[i];
      protection.remove();
    }
  }  
} 
}
函数myFunction(){
函数onOpen(){
var ss=SpreadsheetApp.getActive();
var source=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Sheet1”);
var cell=source.getRange(“B12”).getValue();
var范围=ss.getRange(“B2:B11”);
如果(单元格==10){
//如果单元“B12”=10,则保护范围B2:B11
var protection=range.protect().setDescription('Sample protected range');
Logger.log
}否则{
//如果单元格“B12”不是10,请移除保护
var保护=ss.getProtections(电子表格应用程序保护类型范围);
对于(变量i=0;i<0.length;i++){
无功保护=保护[i];
保护。移除();
}
}  
} 
}
我也希望总和代表大便而不是小时,因此如果一个人写“12”,总和栏将记录“1”

任何帮助都会令人惊讶。

你应该改变一些事情
  • 不要在
    myFunction
    内部嵌套
    onOpen
    -它将不起作用
  • 如果您希望在每次更新
    B12
    时更新保护,则应使用
    onEdit
    触发器,而不是
    onOpen
  • 最好将
    单元格==10
    替换为
    单元格>=10
    ,以考虑该值意外超出最大值的可能性 4.仅仅创造一种保护是不够的,要使它有用,你需要从中吸取教训
  • 只有(你)应该保持访问权限
  • 为此,请使用而不是简单的,以确保它始终以您而不是打开文档的用户的身份运行
  • 样本(待选):

    function bindAnOnEditTiggerToMe() {
    
      var ss = SpreadsheetApp.getActive();
      var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
      var cell = source.getRange("B12").getValue();
      var range = ss.getRange("B2:B11");
    
      if (cell >= 10) {    
        // Protect range B2:B11 if cell 'B12' = 10
        var protection = range.protect().setDescription('Sample protected range');
        var me = Session.getEffectiveUser();
        protection.addEditor(me);
        protection.removeEditors(protection.getEditors());
        if (protection.canDomainEdit()) {
          protection.setDomainEdit(false);
        }    
      } else {    
        // Remove protection if cell 'B12' is anything other than 10
        var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);    
        for (var i = 0; i < protections.length; i++) {
          var protection = protections[i];
          protection.remove();
        }
      }  
    } 
    
    函数bindanoneditiggertome(){
    var ss=SpreadsheetApp.getActive();
    var source=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Sheet1”);
    var cell=source.getRange(“B12”).getValue();
    var范围=ss.getRange(“B2:B11”);
    如果(单元格>=10){
    //如果单元“B12”=10,则保护范围B2:B11
    var protection=range.protect().setDescription('Sample protected range');
    var me=Session.getEffectiveUser();
    保护。加法器(me);
    protection.removeditors(protection.getEditors());
    if(protection.canDomainEdit()){
    protection.setDomainEdit(false);
    }    
    }否则{
    //如果单元格“B12”不是10,请移除保护
    var保护=ss.getProtections(电子表格应用程序保护类型范围);
    对于(变量i=0;i<0.length;i++){
    无功保护=保护[i];
    保护。移除();
    }
    }  
    }