Datetime Google脚本在特定日期运行(多个日期)

Datetime Google脚本在特定日期运行(多个日期),datetime,google-apps-script,google-sheets,Datetime,Google Apps Script,Google Sheets,我需要帮助来写剧本。我想做的是:脚本是时间触发器(每天),但当它运行时,我想添加特定的日期(每个区域(单元格)一个日期)。如果日期不在选项中,脚本将运行,但不执行任何操作 下面是我在这里帮助下已经完成的脚本: 函数AddProtectionToColumn(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var范围=GetRange(ss); var protectSs=range.protect().setDescription('protec

我需要帮助来写剧本。我想做的是:脚本是时间触发器(每天),但当它运行时,我想添加特定的日期(每个区域(单元格)一个日期)。如果日期不在选项中,脚本将运行,但不执行任何操作

下面是我在这里帮助下已经完成的脚本:

函数AddProtectionToColumn(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var范围=GetRange(ss);
var protectSs=range.protect().setDescription('protect');
var me=Session.getEffectiveUser();
增编程序(me);
removeditors(protectSs.getEditors());
if(protectSs.canDomainEdit()){
protectSs.setDomainEdit(false);
}
}
函数GetRange(ss){
var today=新日期().getDate();
//假设你只在第一张纸上画保护范围
var protections=ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE);
如果(日期==('2019年10月1日'){
返回ss.getRange('A1:B5');
如果(日期==('2019年10月2日'){
返回ss.getRange('C1:D5');
}
}
脚本的部分(保护)工作得很好。我在设置日期方面遇到了问题。我尝试了一些东西,但没有效果。你有解决方案吗? 另外,我没有太多的脚本编写经验,我的第一语言是法语。 谢谢!!

回答: 您可以使用
getDate()
方法获取当前日期的编号,并使用与当前代码类似的条件

代码示例: 函数GetRange(ss){ var today=新日期().getDate(); var protections=ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE); 如果(今天==1){ 返回ss.getRange(“第1天范围”); } 如果(今天==2){ 返回ss.getRange(“第2天范围”); } 否则如果(今天==3){ 返回ss.getRange(“第3天范围”); } //否则块继续。。。 否则如果(今天==31){ 返回ss.getRange(“第31天范围”); } } 老实说,我并不推荐这样做,因为您将有一个非常大的if块,但对于您的用例来说,这是可行的

说明:
getDate()
方法返回一个数字,等于日期对象当天的数字日期

例如:

var date1=新日期('2019年10月1日')。getDate();//==1
var date2=新日期('21/12/1984')。getDate();//==21
var date3=新日期('2000年1月14日')。getDate();//==14
var date4=新日期('2004年2月29日')。getDate();//==29
回答: 您可以使用
getDate()
方法获取当前日期的编号,并使用与当前代码类似的条件

代码示例: 函数GetRange(ss){ var today=新日期().getDate(); var protections=ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE); 如果(今天==1){ 返回ss.getRange(“第1天范围”); } 如果(今天==2){ 返回ss.getRange(“第2天范围”); } 否则如果(今天==3){ 返回ss.getRange(“第3天范围”); } //否则块继续。。。 否则如果(今天==31){ 返回ss.getRange(“第31天范围”); } } 老实说,我并不推荐这样做,因为您将有一个非常大的if块,但对于您的用例来说,这是可行的

说明:
getDate()
方法返回一个数字,等于日期对象当天的数字日期

例如:

var date1=新日期('2019年10月1日')。getDate();//==1
var date2=新日期('21/12/1984')。getDate();//==21
var date3=新日期('2000年1月14日')。getDate();//==14
var date4=新日期('2004年2月29日')。getDate();//==29

日期的
是什么
?我用getdate()尝试了一些东西,但我确定它不正确。我无法找到如何使用getdate()。日期的
是什么
?我用getdate()尝试了一些东西,但我确定它不正确。我无法找到如何使用getdate()的方法。我不确定我是否理解正确。此方法是否允许我将每个范围的特定日期关联起来?我认为存在一些误解。这将允许您使用
“2019年10月1日”
字符串作为日期进行比较。您的
GetRange()
由于语法不正确,原始问题中的函数将无法自行运行。如果此答案不合适,请与我分享您的工作表,以便我更好地理解您的问题并提供更可靠的解决方案。在电子表格中,每周有5个表(每天1个表)。此文档将与其他人共享,因此我需要在某个日期自动保护表。每个表必须与某个日期关联。我希望它更清晰!好的,我想我开始理解了!它是每周每天更改还是每月每个日期更改?与答案有什么不同?非常感谢您的帮助ping me,真的很感谢!如果只有1个星期一、1个星期二等,你给我的第一个答案很有效。但是,我意识到,当我有几个星期一、星期二等时,脚本并不真正合适(我不希望每个星期一、星期二等同时受到保护)。因此,与表关联的日期(范围)似乎更合适。它会在每月的每个日期更改。(每月一张)。例如,有人会在x日期完成第一个表,并且在一天结束时,此表将受到保护。(每天触发)。我不确定我是否理解正确。此方法是否允许我将每个范围的特定日期关联起来?我认为存在一些误解。这将允许您使用
“2019年10月1日”
字符串作为日期进行比较。您的
GetRange()
由于语法不正确,原始问题中的函数将无法自行运行。如果此答案不合适,请与我分享您的工作表,以便我更好地理解您的问题并提供更详细的答案