首页 > 解决方案 > 当该行中的日期早于今天时自动保护行

问题描述

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

我需要编辑器能够使用当前日期和所有后续日期而不是之前的日期来编辑行。第二天,具有过去日期的行将受到保护。

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

标签: google-apps-scriptgoogle-sheetsscripting

解决方案


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

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() 的第二个参数来更改时区。
  • 日期应该排序。

参考:


推荐阅读