【问题标题】:How to fire an onOpen event in Google Spreadsheet when a spreadsheet was 'Make a Copy'?当电子表格是“制作副本”时,如何在 Google 电子表格中触发 onOpen 事件?
【发布时间】:2018-02-01 15:04:14
【问题描述】:

我知道一些基本的 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() 触发器,因为我设置了触发器“来自电子表格”、“打开时”事件。 每次打开模板时,它都会从主员工表中复制更新的员工。

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

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

为了在他们复制的文件中创建触发器,他们必须运行以下代码一次(这很混乱,因为他们没有接受过 IT 培训)

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

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

百万感谢!

【问题讨论】:

  • 一旦他们制作了副本,他们将不得不授权代码。因为代码是在证书下运行的,所以您可以尝试使用custom menus 来简化此过程。此外,您可能想查看谷歌表格的 importRange() 函数。
  • 感谢您的回复,但据我所知,自定义菜单在移动版本中不起作用。 ImportRange 请求“允许访问”,这也只能在桌面版工作表下工作:( 工作人员主要使用智能手机

标签: google-apps-script google-sheets


【解决方案1】:

你试过了吗:

function onOpen(e) {}

还有

  ScriptApp.getProjectTriggers()

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

【讨论】:

  • 嗨 Stefan,我的问题是,我无法获得任何触发器 install var ss = SpreadsheetApp.getActive(); ScriptApp.newTrigger('onTimesheetOpen') .forSpreadsheet(ss) .onOpen() .create();这意味着如果它是“制作副本”版本,则代码将不会运行。我的关键问题是,如何触发一个“复制”的新文档
  • 添加一个函数 OnOpen (e) {}。检查触发器是否存在,如果不存在则添加触发器。 OnOpen 运行始终不需要触发器。
【解决方案2】:

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

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

您可以直接与您的员工分享,也可以使用谷歌表格的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)您可以直接发布您的源表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    相关资源
    最近更新 更多