【问题标题】:Google script run at specific date (more than one date)Google 脚本在特定日期运行(多个日期)
【发布时间】:2019-10-01 14:28:14
【问题描述】:

我需要帮助来编写脚本。这就是我想要做的:脚本是时间触发器(每天),但是当它运行时,我想添加特定的日期(每响一个日期(单元格))。如果日期不在选项中,则脚本将运行但不注意。

这是我已经在此处的帮助下使用的脚本:

function AddProtectionToColumn() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = GetRange(ss);
  var protectSs = range.protect().setDescription('Protect');
  var me = Session.getEffectiveUser();
  protectSs.addEditor(me);
  protectSs.removeEditors(protectSs.getEditors());
  if (protectSs.canDomainEdit()) {
    protectSs.setDomainEdit(false); 
  }
}

function GetRange(ss){
  var today = new Date().getDate();
  // assuming you're only making protected ranges on the first sheet
   var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE);
  if (at date == ('october 01, 2019')){ 
    return ss.getRange('A1:B5');

  if (at date == ('october 02, 2019')){ 
    return ss.getRange('C1:D5');
  }
}

脚本部分(保护)运行良好。我在日期设置方面遇到了麻烦。我尝试了一些东西,但它没有用。你有解决办法吗?

【问题讨论】:

  • 什么是at date
  • 我尝试使用 getdate(),但我确定它不正确。我无法找到如何使用 getdate()。

标签: datetime google-apps-script google-sheets


【解决方案1】:

答案:

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

代码示例:

function GetRange(ss){

  var today = new Date().getDate();
  var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE);

  if (today == 1){ 
    return ss.getRange("day-1-range");
  }
  else if (today == 2){ 
    return ss.getRange("day-2-range");
  }
  else if (today == 3){
    return ss.getRange("day-3-range");
  }
  // else block continues...
  else if (today == 31){
    return ss.getRange("day-31-range");
  }
}

老实说,我真的不建议这样做,因为您将有一个非常大的 if 块,但对于您的用例,这将起作用。

说明:

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

例如:

var date1 = new Date('01 October 2019').getDate(); // == 1
var date2 = new Date('21/12/1984').getDate(); // == 21
var date3 = new Date('Jan 14 2000').getDate(); // == 14
var date4 = new Date('29 February 2004').getDate(); // == 29

【讨论】:

  • 我不确定我理解正确。这种方法是否允许我为每个范围关联一个特定日期?
  • 我认为有一些误解。这将允许您使用'october 01, 2019' 字符串作为日期进行比较。由于语法不正确,您原始问题中的 GetRange() 函数不会自行运行。如果此答案不合适,您能否分享您的工作表,以便我更好地理解您的问题并提供更可靠的解决方案?
  • 在电子表格中,每周有 5 个表(每天 1 个)。该文档将与其他人共享,因此我需要在某个日期自动保护表格。每个表都必须与一个日期相关联。我希望它更清楚! docs.google.com/spreadsheets/d/…
  • 好吧,我想我开始明白了!它是一周中的每一天还是一个月中的每个日期都发生变化?与答案here有什么不同?
  • 非常感谢您对我的帮助,非常感谢!如果只有 1 个星期一、1 个星期二等,你给我的第一个答案效果很好。但是,我意识到当我有几个星期一、星期二等时,脚本并不合适。(我不希望每个星期一、星期二等.同时受到保护)。因此,与表格(范围)关联的日期似乎更合适。它在每个月的日期发生变化。 (每月一张)。例如,某人将在 x 日期完成第一个表,并且在一天结束时,该表将受到保护。 (每天触发)。
猜你喜欢
  • 2015-08-28
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多