防止根据日期编辑单元格-Google表格

时间:2018-11-01 15:53:57

标签: google-sheets

我正在寻找一种方法来完成以下任务:

1)我们有一个Google表格,其中在A行(B -...列)中有日期,例如B1中的10/30/18,B2中的10/31/18等。我们当然可以添加一个到该日期的时间也是如此,例如10/31/18 14:30:00或类似的东西,如果它使此过程更容易。

2)我希望该对应列中的单元格只能在该列第1行中的单元格日期上进行编辑(例如,B2:B30中的单元格只能在10/30 / 18)。如果时间更方便,我希望从B1 + 70分钟的时间/日期开始就可以对单元格进行编辑。因此,如果日期/时间是10/31/18 14:30:00,则该列(不包括第一行)中的单元格只能在2:30 PM(14:30:00)到3:40 pm之间进行编辑( +70分钟)。

3)在任何情况下,工作表的“所有者”仍需要能够编辑超出所示日期/时间范围的单元格。

请告知。

1 个答案:

答案 0 :(得分:0)

我已尝试根据一些先前描述的approaches提供答案。 本质上,您是根据日期创建受保护范围的-我们需要注意保护会自动应用于整个范围,并且以后我们需要从日期中删除保护。

下面将更简单,仅比较日期(而不是时间),将单元格与过去的日期锁定。我在下面提到日期/时间的方法。

a = SpreadsheetApp.getActiveSpreadsheet();
  var s = a.getSheetByName('ExportPlan');
  var values = s.getRange("M1:M").getValues();
  var row, col, len, index; 

function mylockranges() {
  var myDate = TODAY(); //myDate is today

  //First range to lock
  var row = 1;
  var col = 1;


  for (row = values.length-1; row >=3 ; row--) {
    // Only unprotect rows with dates from today onwards
  if (typeof values[row][0] == 'object' && values[row][0] < myDate) {
    lockRange(row, col);

    }
  }
}

function lockRange(row, col){
  row = row+1 ; 
  var range = s.getRange(row, col, 1, 25);

  // Create protection object. Set description, anything you like.
  var protection = range.protect().setDescription('Protected, row ' + row);
}

对于日期/时间实现,可以将myTime=NOW()用于日期/时间输入。您可以在NOW()上进行加法,其中加1将增加1天。假设70分钟大约是0.0486天,那么您可以针对锁定范围按照if(NOW()< myTime +.0486)的方式进行操作。您可以通过在开始时使用var allowedTime=NOW() + .0486来简化此操作。