我正在寻找一种方法来完成以下任务:
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)在任何情况下,工作表的“所有者”仍需要能够编辑超出所示日期/时间范围的单元格。
请告知。
答案 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
来简化此操作。