【问题标题】:Include Parent Folder Name in Spreadsheet onOpen在电子表格 onOpen 中包含父文件夹名称
【发布时间】:2019-05-07 23:03:21
【问题描述】:

我希望电子表格自动将其父文件夹的名称包含在活动工作表 onOpen 的单元格 A1 中。如果我手动运行它,我有一个脚本可以成功实现这一点,但我无法在 onOpen 上完成它。如下所示,我尝试使用可安装的 onOpen 触发器,但这不是解决方案,因为我想制作电子表格的副本并在 onOpen 中包含文件夹名称。触发器不会与电子表格一起复制,所以我回到第一方。问题出在权限上,我相信?有什么解决方法吗?

【问题讨论】:

  • 虽然我不确定您的脚本,但如何将该函数安装为 OnOpen 事件触发器?因为我认为脚本可能会使用需要授权的方法。届时,在安装触发器之前,请将函数名称从onOpen()重命名为其他人,以防止重复运行。 developers.google.com/apps-script/guides/triggers/installable 如果这不是直接的解决方案,我深表歉意。
  • 好主意。感谢您的输入。唯一的问题是我将制作电子表格的多个副本,并且可安装的触发器不会自动复制到新副本。因此,我又回到了开始需要手动运行该功能的地方。

标签: google-apps-script google-sheets google-drive-api


【解决方案1】:

如果项目中还没有一个可安装的 onOpen 触发器,您可以使用类似的方法创建一个。

function createOpenTrigger(funcname) {
  if(funcname) {
    if(!isTrigger(funcname)) {
      ScriptApp.newTrigger(functionName).forSpreadsheet(SpreadsheetApp.getActive()).onOpen().create();
    }
  }
}

function isTrigger(funcName){
  var r=false;
  if(funcName){
    var allTriggers=ScriptApp.getProjectTriggers();
    for(var i=0;i<allTriggers.length;i++){
      if(funcName==allTriggers[i].getHandlerFunction()){
        r=true;
        break;
      }
    }
  }
  return r;
}

当然,用户必须先批准它。

【讨论】:

  • 好的。原谅新手。我在很短的时间内走了很长一段路,但我仍在弄清楚。那么,在上面的脚本中,我会用我已经拥有的函数的名称代替“funcname”吗?然后,当电子表格打开时,它会要求用户授权创建onOpen触发器来获取和发布文件名,然后如果他们批准它就会运行?
  • 我认为 OP 使用有界或独立脚本来创建 onOpen 可安装触发器而不是使用 getActive 来使用 openByUrl / openById 会更方便,但是是一个主要基于意见的 设计决策。
【解决方案2】:

按照下面的建议,我尝试使用可安装的 onOpen 触发器,但这不是解决方案,因为我想制作电子表格的副本并在 onOpen 中包含文件夹名称。触发器不会与电子表格一起复制,所以我回到第一方。问题出在权限上,我相信?有什么解决方法吗?

不,问题不在于权限,问题与其他概念有关。我会尝试做一个总结,包括我认为这个问题所需的最少部分,以帮助您学习基本术语,以便您可以浏览本网站和其他网站以找到您需要或帮助您制作的东西更具体的问题:

  • 有两种脚本项目,有界和独立。
  • 执行某些动作的脚本应在执行前获得授权。请继续阅读。
  • 有两种触发器,简单的和可安装的
  • 可以手动或通过脚本创建可安装的触发器。通过脚本创建触发器需要授权。
  • 可安装触发器只能执行手动或通过脚本创建触发器的用户已获得授权的功能。如果您创建了一个可安装的触发器,但后来对脚本进行了更改,那么这可能会使您的脚本再次获得授权。
  • 可以使用有界和独立的项目脚本为电子表格创建可安装触发器。此类触发器需要授权才能访问非公开电子表格
  • 要获取电子表格的父文件夹,您的脚本应使用 Drive Service 或 Drive Advanced Service。这需要授权。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-22
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-07-29
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多