【问题标题】:Set Range protection weekly time-based trigger设置范围保护每周基于时间的触发
【发布时间】:2020-06-08 17:52:44
【问题描述】:

我正在尝试编写一个脚本来每周保护不同范围的工作表。我已经弄清楚了每周锁定和触发来启动它。但是,每周都需要一个新的范围。如果是第 1 周;

var range = sheet.getRange(4, 5, 5, 6);

第 2 周需要;

var range = sheet.getRange(10, 5, 5, 6);

等等。因此,只有我的 Row 输入需要根据触发器激活的周数进行更改。

目前完整的脚本如下:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Multiple'); //INSERT SHEET NAME HERE


function lockRange(row, col){
  var range = sheet.getRange(10, 5, 5, 6);

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

 // Ensure the current user is an editor before removing others. Otherwise, if the user's edit
 // permission comes from a group, the script will throw an exception upon removing the group.
 var me = Session.getEffectiveUser();
 protection.addEditor(me);
 protection.removeEditors(protection.getEditors());
 if (protection.canDomainEdit()) {
   protection.setDomainEdit(false);
 }
}

【问题讨论】:

  • 欢迎来到Stack Overflow。您似乎正在寻求有关在 Google Apps 脚本中实施算法的帮助。请添加您的搜索/研究工作的简要描述(如 How to Ask 中所建议的)关于如何根据周设置行号(提示:查找 JavaScript 问题)
  • 您应该在某处为每周范围的开始设置一个基准(比如 2020 年 6 月 1 日星期一),然后计算从那时起已经过去了多少整周,以计算传递给 getRange 的第一个参数.

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


【解决方案1】:

答案:

您可以使用PropertiesService 将下周存储在脚本的属性中。

代码修改:

function lockRange(row, col){
  var week = PropertiesService.getScriptProperties().getProperty("week");

  if (!week) {
    week = PropertiesService.getScriptProperties().setProperty("week", 4)
  }
  else {
    week = PropertiesService.getScriptProperties().setProperty("week", parseInt(week) + 6)
  }  

  week = PropertiesService.getScriptProperties().getProperty("week");

  var range = sheet.getRange(parseInt(week), 5, 5, 6);

  // continue your code...
}

function clearProperties() {
  // run this function ONCE to clear any properties that are being stored in
  // the script from testing/previous runs.
  PropertiesService.getScriptProperties().deleteAllProperties();
}

参考资料:

【讨论】:

  • 我目前遇到语法错误 - 意外标记 'else'
  • @DStutz 您需要使用 } 关闭 if 块
  • TypeError: PropertiesService.getProperty is not a function 是我遇到的下一个错误
  • 完整方法是PropertiesService.getScriptProperties().getProperty
  • 异常:无法将 'ScriptProperties' 转换为 int。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多