当此行中的日期早于今天时自动保护行

Automatically protect rows when the date in this row is before today

我需要根据每一行 A 列中发生的日期自动保护行,当日期早于今天时。我有一个 table,A 列中有日期,其他列中有与这些日期相关的不同数据

我需要编辑器能够编辑包含当前日期和所有后续日期但不包含之前日期的行。第二天,过去日期的行将受到保护。

https://docs.google.com/spreadsheets/d/1iEySLLmngzgFTJWWHhEZtUfU_GBxG-X77CvGTqu7U8Q/edit?usp=sharing

只要用户打开电子表格,此代码就会 运行。这也将增加对小于当前日期的日期的保护。

function onOpen(e) {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var dateRange = sh.getRange(3, 1, sh.getLastRow()-2, 1);
  var val = dateRange.getDisplayValues();
  var curDate = Utilities.formatDate(new Date(), "GMT+8", "M/dd/YYYY");
  var protectRow;
  //check if date is less than the current date
  for(var i = 0; i < val.length; i++){
    if(val[i][0]>=curDate){
      protectRow = i;
      break;
    }
  }
  
  var protection = sh.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  //If protection exists, update else add new one.
  if(protection.length > 0){
    var range = sh.getRange(3, 1, protectRow, 13);
    protection[0].setRange(range);
  }else{
    sh.getRange(3, 1, protectRow, 13).protect();
  }
}

示例:

我在这里复制了您的数据,格式化了日期并重新打开了文档。

*注:

  • 电子表格中日期的格式应与 curDate 变量中的格式相匹配。
  • 您可以通过更改 curDate 中 formatDate() 的第二个参数来更改时区。
  • 应该对日期进行排序。

参考文献: