如何在电子表格“制作副本”时在Google电子表格中触发onOpen事件?

时间:2018-02-01 15:04:15

标签: google-apps-script google-sheets

我知道一些基本的javascript / app-script,我有以下代码

function onTimesheetOpen() {  
  var source = {
    ssId : '1Mqbh09mj_UoRZiQkzw1gOVpHFiYk-8qZvpnDbzCYOFY',
    shName : 'prompt',
    a1Notation : "A1:A100",
  };

  var target = {
       ssId : SpreadsheetApp.getActiveSpreadsheet().getId(),
    shName : 'Setups',
    a1Notation : "A1:A100",
  };

  AsExt.UTLCopyCell(source, target);
}

它是一个与一组工作人员共享的READONLY时间表模板,用于从员工表(源)复制员工列表并填充到我的目标(模板表)中。 onTimesheetOpen()触发因为我设置了一个触发器" From Spreadsheet"," On Open"事件。 每次打开模板时,它都会从主员工表中复制更新的员工。

工人的工作流程是制作副本'从模板时间表文件到他们的驱动器(我的驱动器),我注意到每次复制时都会删除触发器。它与传统的编程语言有很大的不同,我希望能从大师那里得到一些帮助:) 我不能指望每个工作人员在制作副本之后打开脚本编辑器'因为他们没有接受过IT培训,所以他们的工作就是获取时间表,其中列出了最新员工的名单(主文件)。

我也试过了可安装的触发器 https://developers.google.com/apps-script/guides/triggers/installable 这也不合适。

为了在他们复制的文件中创建一个触发器,他们必须运行以下代码ONCE(由于他们没有经过IT培训,这会让人感到困惑)

function createSpreadsheetOpenTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('onTimesheetOpen')
      .forSpreadsheet(ss)
      .onOpen()
      .create();
}

向员工分享只读模板的最佳方式是什么?它会直接从主员工表中获取最新员工列表而不让他们接触代码?

万分感谢!

2 个答案:

答案 0 :(得分:0)

你试过了吗?

function onOpen(e) {}

并且

  ScriptApp.getProjectTriggers()

您可能可以检查是否已安装触发器。

答案 1 :(得分:0)

替代解决方案: 由于您的大多数用户都在智能手机上,因此您可以执行以下操作。您可以publish your sheet,只需选择网页选项即可。它会像这样创建链接:

https://docs.google.com/spreadsheets/d/e/2PACX-1vSLilJvnFXiPW1ZsqRNQIVQDXasxYihzbEpxCO54nSpjv1IBIur1p5U7G8oJ2P8ThmZXYuV6LPJVZ8s/pubhtml?gid=725782869&single=true

您可以直接与工作人员共享,也可以使用Google工作表的importHtml()功能将这些发布值导入到工作表中

IMPORTHTML("https://docs.google.com/spreadsheets/d/e/2PACX-1vSLilJvnFXiPW1ZsqRNQIVQDXasxYihzbEpxCO54nSpjv1IBIur1p5U7G8oJ2P8ThmZXYuV6LPJVZ8s/pubhtml?gid=725782869&single=true","table",1)

备注
1)任何人都可以查看该链接 2)如果在线观看,它假设每隔5分左右更新一次 3)如果使用importHtml()在工作表中查看,则在重新打开工作表时将刷新 4)ImportHTML()确实需要像importRange()一样授权,因此在复制时仍然可以工作 5)您可以直接发布源表。