【问题标题】:Installing time based trigger upon creating a new spreadsheet在创建新电子表格时安装基于时间的触发器
【发布时间】:2020-11-12 16:33:35
【问题描述】:

我有一个电子表格,用作采购订单日志的模板。此电子表格有一个脚本化的 onOpen(e) 函数,该函数自动为另一个函数创建一个定时触发器,该函数将电子表格作为 XLS 文件下载到特定的共享驱动器。

触发器的目的是使下载过程自动化,因此任何复制的电子表格数据都不会因人为错误而丢失。

我的问题是,当用户复制模板时,onOpen(e) 函数将不会运行,因为您必须手动授权该用户运行新电子表格的脚本。

有没有办法自动化脚本授权?

function onOpen(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssn = ss.getId();
  var ssf = DriveApp.getFileById(ssn);
  var test = ss.getOwner().getEmail();
  var tName = ScriptApp.getProjectTriggers();
 
  if (test !=  "itadmin@company.com") {
  
    if (tName.length > 0) {
      ScriptApp.deleteTrigger(tName.pop());
    }

    ScriptApp.newTrigger('downloadXLS')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(1)
      .create();

    ss.addEditor("itadmin@company.com");
    ssf.setOwner("itadmin@company.com");
  }
}

【问题讨论】:

  • 我猜如果他尝试执行这个功能,他会被提示一个窗口来授权应用程序。但如果你想完全自动化,那恐怕答案是否定的。

标签: google-apps-script google-sheets triggers authorization


【解决方案1】:

每次打开电子表格时都会执行onOpen 简单触发器。我认为“在创建新电子表格时”创建触发器是一个糟糕的选择,另一方面,没有办法自动授权有界脚本。

另一种方法是创建附加组件。这种方法的优点之一是在第一次安装脚本和更改脚本范围时需要授权。

另一个优点是所有电子表格都将使用一个脚本,而不是在每个电子表格上都有原始脚本的副本。

资源

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多