gpt4 book ai didi

google-apps-script - App Script 如何检测是否使用 Doc、Sheet 或其他类型的文档调用了 onOpen 方法?

转载 作者:行者123 更新时间:2023-12-05 00:45:19 39 4
gpt4 key购买 nike

在 onOpen 方法中,如何确定文档类型?

来自 Quickstart: Add-on for Google Docs建议使用以下代码:

function onOpen(e) {
DocumentApp.getUi().createAddonMenu()
.addItem('Start', 'showSidebar')
.addToUi();
}

但是,当打开 Google 表格时,脚本会引发异常:
Exception: Cannot call DocumentApp.getUi() from this context. at onOpen(Code:9:15)

应该有一个测试,首先,检测正在打开的文档类型上下文,允许脚本选择是否以及如何添加菜单项。怎么做? onOpen 的引用资料表示 e.source 将是不同的类型,但 type of e.sourceobject .

欲望是这样的:
function onOpen(e) {
if (/* answer to this question: test if onOpen called for Doc only */) {
DocumentApp.getUi().createAddonMenu()
.addItem('Start', 'showSidebar')
.addToUi();
}
}

最佳答案

  • 您想在打开 Google 文档时检测 Google 文档的 mimeType。然后,您要检索 doc 的对象。
  • 您想使用 Google Apps 脚本实现此目的。

  • 如果我的理解是正确的,这个答案怎么样?请认为这只是几个答案之一。

    解决方案:

    在此示例脚本中,它会在打开 Google 文档时检索容器绑定(bind)脚本的事件文档。作为示例情况,当该脚本用于Spreadsheet的容器​​绑定(bind)脚本时, DocumentApp.getActiveDocument() , SlidesApp.getActivePresentation()FormApp.getActiveForm()返回 null .而且只有 SpreadsheetApp.getActiveSpreadsheet()返回对象。此方法使用这种情况。

    示例脚本:

    示例脚本如下。
    function onOpen() {
    var docObject = DocumentApp.getActiveDocument() ? DocumentApp :
    SpreadsheetApp.getActiveSpreadsheet() ? SpreadsheetApp :
    SlidesApp.getActivePresentation() ? SlidesApp :
    FormApp.getActiveForm() ? FormApp : null;

    // When this is used for your script, it becomes as follows.
    docObject.getUi().createAddonMenu()
    .addItem('Start', 'showSidebar')
    .addToUi();
    }
  • 例如,将上述脚本放入 Google 文档时,docObject成为 DocumentApp 的对象.和docObject.getUi().createAddonMenu().addItem('Start', 'showSidebar').addToUi()适用于 Google 文档。

  • 笔记:
  • 在此脚本中,使用了以下 4 个作用域。
  • https://www.googleapis.com/auth/documents
  • https://www.googleapis.com/auth/forms
  • https://www.googleapis.com/auth/presentations
  • https://www.googleapis.com/auth/spreadsheets
  • 例如,如果您不需要检查 Google 表单,请删除 FormApp.getActiveForm() ? FormApp : .
  • 上面的脚本通过简单的触发器工作。但如果添加其他方法,可能需要使用可安装触发器。请注意这一点。

  • 引用:
  • Class DocumentApp
  • Class SpreadsheetApp
  • Class SlidesApp
  • Class FormApp

  • 如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

    编辑:

    首先,我很抱歉我误解了你的目标。从您更新的问题中,我可以理解如下。
  • 当容器绑定(bind)脚本的父级仅为 Google 文档时,您希望运行该脚本。

  • 如果我的理解是正确的,当使用我的答案的方法时,下面的修改如何?

    从:
    if (/* answer to this question: test if onOpen called for Doc only */) {

    到:
    if (DocumentApp.getActiveDocument()) {
  • 在这种情况下,当它用于除 Google 文档之外的 Google 文档时,DocumentApp.getActiveDocument()返回 null .这样,if 语句中的脚本不会为 Google 文档运行,但 Google 文档除外。
  • 关于google-apps-script - App Script 如何检测是否使用 Doc、Sheet 或其他类型的文档调用了 onOpen 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57651822/

    39 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com